一、数据筛选:

处理方式:

1、filter函数在py3,返回的是个生成式。

  1. from random import randint
  2.  
  3. data = [randint(-100,100) for i in range(10)]
  4. data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98]
  5.  
  6. info = filter(lambda x:x>0,data2)
  7. for i in info:
  8. print(i)

2、列表解析

  1. from random import randint
  2.  
  3. data = [randint(-100,100) for i in range(10)]
  4. data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98]
  5.  
  6. info = [i for i in data2 if i >0]
  7. print(info)

filter与列表解析的比较:

在py2使用列表生成式效率高,在py3使用filter过滤器会效率高

  1. from random import randint
  2. import timeit
  3. import pprint
  4. data = [randint(-100,100) for i in range(10)]
  5. data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98]
  6.  
  7. t1 = timeit.Timer('[i for i in [34, -59, -13, 96, -78, 38, 89, -96, -79, 98] if i >0]')
  8. t2 = timeit.Timer('filter(lambda x:x>0,[34, -59, -13, 96, -78, 38, 89, -96, -79, 98])')
  9. # t2 =
  10. print(t1.timeit())
  11. print(t2.timeit())
  12.  
  13. 结果:
  14. 1.9095332647026366
  15. 0.6967581773661176

3、字典解析:

使用字典生成式来筛选数据

  1. from random import randint
  2. info = {x:randint(10,100) for x in range(1,11)}
  3. print(info)
  4. info2 = {key:value for key,value in info.items() if value >60}

4、集合数据筛选:

结构看起来和字典生成式差不多

  1. data = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98]
  2. data2 = set(data)
  3. print(data2)
  4. info = {x for x in data2 if x>0}
  5. print(info)

二、如何为元组中的每个元素命名,提高程序的可读性

1、给index指定数值常量,类似C里的枚举

  1.  
  1. name,work,play,address = range(4)
  1. people = ("Tom",35,"Teacher","swimming","shenzhen") print(people[name],people[work],people[address])

2、使用标准库中collections.namedtuple替代内置tuple,自定义一个tuple子类,这种方式开销仅仅比普通元组高一些。

  1. from collections import namedtuple
  2. people2 = namedtuple('people2',(['name','age','work','play','address']))
  3. info = people2("Tom",35,"Teacher","swimming","shenzhen")
  4. print(info)
  5. print(info.name,info.age,info.work,info.play,info.address)
  6.  
  7. 结果:
  8. people2(name='Tom', age=35, work='Teacher', play='swimming', address='shenzhen')
  9. Tom 35 Teacher swimming shenzhen

3、如何统计出序列中元素出现的频度

1、使用fromkey方法初始化一个dict,然后通过for循环迭代统计次数。

  1. # from random import randint
  2. #
  3. # data = [randint(0,10) for x in range(30)]
  4. # print(data)
  5. data2 = [3, 0, 9, 1, 4, 1, 5, 7, 4, 7, 7, 3, 10, 4, 0, 6, 9, 2, 2, 4, 1, 1, 7, 8, 2, 7, 3, 1, 4, 9]
  6. dict1 = dict.fromkeys(data2,0)
  7. print(dict1)
  8. for x in data2:
  9. dict1[x] += 1
  10.  
  11. print(dict1)
  12.  
  13. 结果:

{0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0}
{0: 2, 1: 5, 2: 3, 3: 3, 4: 5, 5: 1, 6: 1, 7: 5, 8: 1, 9: 3, 10: 1}

2、使用collections.Counter对象

  1. # from random import randint
  2. #
  3. # data = [randint(0,10) for x in range(30)]
  4. # print(data)
  5. data2 = [3, 0, 9, 1, 4, 1, 5, 7, 4, 7, 7, 3, 10, 4, 0, 6, 9, 2, 2, 4, 1, 1, 7, 8, 2, 7, 3, 1, 4, 9]
  6. from collections import Counter
  7. dict1 = Counter(data2)
  8. print(dict1)
  9. print(dict1[1],dict1[4],dict1[7])
  10. print(dict1.most_common(3))
  11.  
  12. 结果:

Counter({1: 5, 4: 5, 7: 5, 2: 3, 3: 3, 9: 3, 0: 2, 5: 1, 6: 1, 8: 1, 10: 1})
5 5 5
[(1, 5), (4, 5), (7, 5)]

4、如何根据字典中value的大小,对字典的key进行排序

对于这种排序,一般选择用内置函数sorted,因为这些内置函数一般使用C编写,运算速度会快些

1、使用zip函数

  1. from random import randint
  2. dict1 = {x:randint(50,100) for x in 'abcdefg'}
  3. print(dict1)
  4. ret = sorted(zip(dict1.values(),dict1.keys()))
  5. print(ret)
  6.  
  7. 结果:
  8. {'e': 77, 'd': 100, 'b': 51, 'c': 78, 'g': 55, 'f': 80, 'a': 87}
  9. [(51, 'b'), (55, 'g'), (77, 'e'), (78, 'c'), (80, 'f'), (87, 'a'), (100, 'd')]

2、sorted函数默认对每个迭代对象的第一个元素进行排序,可以通过指定key参数(传入一个函数,sorted每次迭代时会把选择的元素传入key中,然后让我们决定使用哪个元素作为排序对象)来排序

  1. from random import randint
  2. dict1 = {x:randint(50,100) for x in 'abcdefg'}
  3. print(dict1)
  4. print(dict1.items())
  5. ret = sorted(dict1.items(),key=lambda x:x[1])
  6. print(ret)
  7.  
  8. 结果:
  9. {'a': 64, 'f': 51, 'd': 67, 'e': 73, 'c': 57, 'g': 100, 'b': 71}
  10. dict_items([('a', 64), ('f', 51), ('d', 67), ('e', 73), ('c', 57), ('g', 100), ('b', 71)])
  11. [('f', 51), ('c', 57), ('a', 64), ('d', 67), ('b', 71), ('e', 73), ('g', 100)]

1、如何在列表,字典,集合种根据条件筛选数据?2、如何为元组中的每个元素命名,提高程序的可读性3、如何统计出序列中元素出现的频度4、如何根据字典中value的大小,对字典的key进行排序的更多相关文章

  1. 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧

    实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...

  2. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  3. python基础一 -------如何在列表字典集合中根据条件筛选数据

    如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...

  4. python数据结构-如何在列表、字典、集合中根据条件筛选数据

    如何在列表.字典.集合中根据条件筛选数据 问题举例: 过滤列表[1, 2, 5, -1, 9, 10]中的负数 筛选字典{“zhangsan”:97, "lisi":80, &qu ...

  5. python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

    一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...

  6. python 学习笔记(一):在列表、字典、集合中根据条件筛选数据

    一.在列表中筛选数据 在列表中筛选出大于等于零的数据,一般通用的用法代码如下: data = [3, -9, 0, 1, -6, 3, -2, 8, -6] #要筛选的原始数据列表 result = ...

  7. 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧

    实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...

  8. python基础===如何在列表,字典,集合中根据条件筛选数据

    #常见的操作如下: data = [1, 5, -3, -2, 6, 0, 9] res = [] for x in data: if x>=0: res.append(x) print(res ...

  9. Py小技巧一:在列表,字典,集合中根据条件筛选数据

    1.过滤掉列表中的某些项---列表解析 data=[1,4,2,8,5,-1] res=[] a.依次迭代列表中每一个项 for x in data: if >=0: res.append(x) ...

随机推荐

  1. springMvc注册时图形验证码完整代码与详细步骤``````后续更新注册时对密码进行加密

      第一使用 画图软件制作图片 ,文件名就是验证码    ------用户的实体类 import java.util.Date; public class Member {    private in ...

  2. leetcode.矩阵.766托普里茨矩阵-Java

    1. 具体题目 如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵.给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True. 示例 1: 输入: ma ...

  3. mybatis自学历程(二)

    传递多个参数 1.在mybatis.xml下<mappers>下使用<package> <mappers> <package name="com.m ...

  4. Codeforces 490D Chocolate

    D. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  5. SpringBoot传递单一参数时@RequestParam和@RequestBody的区

    用SpringBoot框架做项目时,经常需要前端给后端传递参数,如果需要多条参数,通常的做法是把这些参数封装为一个对象来传递,前端用POST方式调用.但有时会遇到后端只需要一条参数(比如一个Strin ...

  6. springMVC 框架的xml配置文件的说明

    springMVC框架xml文件配置的说明,直接上代码: 我们介绍四个xml文件配置以及xml内容的理解:application.xml.spring-mvc.xml.pom.xml 和 web.xm ...

  7. spring基于xml的事务控制

    opm配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  8. iptables 防火墙(上)

    iptables 防火墙(上) 1. 防火墙概述 1.1 概念与作用 网络中的防火墙是一种将内部网络和外部网络分开的方法,是一种隔离技术.防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包 ...

  9. 从 Server Timing Header 看服务器是如何处理请求的

    原文作者:Florian Hämmerle      译者:UC 国际研发 Jothy   写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端.服务端.算法.测试.数据.前端等相关的 ...

  10. python 装饰器的坑

    今天研究了下装饰器,添加重试功能遇到了个坑,跟大家分享一下: 代码如下: def re_try(maxtry): print locals() def wrapper(fn): print local ...