1、如何在列表,字典,集合种根据条件筛选数据?2、如何为元组中的每个元素命名,提高程序的可读性3、如何统计出序列中元素出现的频度4、如何根据字典中value的大小,对字典的key进行排序
一、数据筛选:
处理方式:
1、filter函数在py3,返回的是个生成式。
from random import randint data = [randint(-100,100) for i in range(10)]
data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98] info = filter(lambda x:x>0,data2)
for i in info:
print(i)
2、列表解析
from random import randint data = [randint(-100,100) for i in range(10)]
data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98] info = [i for i in data2 if i >0]
print(info)
filter与列表解析的比较:
在py2使用列表生成式效率高,在py3使用filter过滤器会效率高
from random import randint
import timeit
import pprint
data = [randint(-100,100) for i in range(10)]
data2 = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98] t1 = timeit.Timer('[i for i in [34, -59, -13, 96, -78, 38, 89, -96, -79, 98] if i >0]')
t2 = timeit.Timer('filter(lambda x:x>0,[34, -59, -13, 96, -78, 38, 89, -96, -79, 98])')
# t2 =
print(t1.timeit())
print(t2.timeit()) 结果:
1.9095332647026366
0.6967581773661176
3、字典解析:
使用字典生成式来筛选数据
from random import randint
info = {x:randint(10,100) for x in range(1,11)}
print(info)
info2 = {key:value for key,value in info.items() if value >60}
4、集合数据筛选:
结构看起来和字典生成式差不多
data = [34, -59, -13, 96, -78, 38, 89, -96, -79, 98]
data2 = set(data)
print(data2)
info = {x for x in data2 if x>0}
print(info)
二、如何为元组中的每个元素命名,提高程序的可读性
1、给index指定数值常量,类似C里的枚举
name,work,play,address = range(4)
people = ("Tom",35,"Teacher","swimming","shenzhen") print(people[name],people[work],people[address])
2、使用标准库中collections.namedtuple替代内置tuple,自定义一个tuple子类,这种方式开销仅仅比普通元组高一些。
from collections import namedtuple
people2 = namedtuple('people2',(['name','age','work','play','address']))
info = people2("Tom",35,"Teacher","swimming","shenzhen")
print(info)
print(info.name,info.age,info.work,info.play,info.address) 结果:
people2(name='Tom', age=35, work='Teacher', play='swimming', address='shenzhen')
Tom 35 Teacher swimming shenzhen
3、如何统计出序列中元素出现的频度
1、使用fromkey方法初始化一个dict,然后通过for循环迭代统计次数。
# from random import randint
#
# data = [randint(0,10) for x in range(30)]
# print(data)
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]
dict1 = dict.fromkeys(data2,0)
print(dict1)
for x in data2:
dict1[x] += 1 print(dict1) 结果:
{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对象
# from random import randint
#
# data = [randint(0,10) for x in range(30)]
# print(data)
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]
from collections import Counter
dict1 = Counter(data2)
print(dict1)
print(dict1[1],dict1[4],dict1[7])
print(dict1.most_common(3)) 结果:
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函数
from random import randint
dict1 = {x:randint(50,100) for x in 'abcdefg'}
print(dict1)
ret = sorted(zip(dict1.values(),dict1.keys()))
print(ret) 结果:
{'e': 77, 'd': 100, 'b': 51, 'c': 78, 'g': 55, 'f': 80, 'a': 87}
[(51, 'b'), (55, 'g'), (77, 'e'), (78, 'c'), (80, 'f'), (87, 'a'), (100, 'd')]
2、sorted函数默认对每个迭代对象的第一个元素进行排序,可以通过指定key参数(传入一个函数,sorted每次迭代时会把选择的元素传入key中,然后让我们决定使用哪个元素作为排序对象)来排序
from random import randint
dict1 = {x:randint(50,100) for x in 'abcdefg'}
print(dict1)
print(dict1.items())
ret = sorted(dict1.items(),key=lambda x:x[1])
print(ret) 结果:
{'a': 64, 'f': 51, 'd': 67, 'e': 73, 'c': 57, 'g': 100, 'b': 71}
dict_items([('a', 64), ('f', 51), ('d', 67), ('e', 73), ('c', 57), ('g', 100), ('b', 71)])
[('f', 51), ('c', 57), ('a', 64), ('d', 67), ('b', 71), ('e', 73), ('g', 100)]
1、如何在列表,字典,集合种根据条件筛选数据?2、如何为元组中的每个元素命名,提高程序的可读性3、如何统计出序列中元素出现的频度4、如何根据字典中value的大小,对字典的key进行排序的更多相关文章
- 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧
实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...
- Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据
Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...
- python基础一 -------如何在列表字典集合中根据条件筛选数据
如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...
- python数据结构-如何在列表、字典、集合中根据条件筛选数据
如何在列表.字典.集合中根据条件筛选数据 问题举例: 过滤列表[1, 2, 5, -1, 9, 10]中的负数 筛选字典{“zhangsan”:97, "lisi":80, &qu ...
- python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据
一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...
- python 学习笔记(一):在列表、字典、集合中根据条件筛选数据
一.在列表中筛选数据 在列表中筛选出大于等于零的数据,一般通用的用法代码如下: data = [3, -9, 0, 1, -6, 3, -2, 8, -6] #要筛选的原始数据列表 result = ...
- 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧
实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...
- python基础===如何在列表,字典,集合中根据条件筛选数据
#常见的操作如下: data = [1, 5, -3, -2, 6, 0, 9] res = [] for x in data: if x>=0: res.append(x) print(res ...
- Py小技巧一:在列表,字典,集合中根据条件筛选数据
1.过滤掉列表中的某些项---列表解析 data=[1,4,2,8,5,-1] res=[] a.依次迭代列表中每一个项 for x in data: if >=0: res.append(x) ...
随机推荐
- 使用element-ui 组件动态合并table的行/列(第二次修改)
这是第二次修改,在通过调用后台接口返回来的时候,发现了代码中的问题:现在将博客中错误的地方改过来,添加备注 文章需求:动态实现table表格中行/列的自动合并 使用框架及UI类库:Vue+Elemen ...
- 代码编译与反编译 (.py文件与.pyc文件互转)
# 将.py文件转化为.pyc文件,实现代码隐藏的需要,转化后的.pyc文件将在当前目录的__pycache__文件夹下. # .pyc文件的使用与.py文件的使用相同. .py -> .pyc ...
- [POI2010]OWC-Sheep
题目 不难猜到或者发现的性质,如果连了一条对角线划分出了奇数个点,那么这条对角线肯定不合法:因为划分成三角形就不可能有对角线相交,于是划分成奇数的那一边怎么样也不可能划分成全是偶数 于是我们需要对每一 ...
- 欧拉函数(Euler_Function)
一.基本概述在数论,对正整数n,欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商 ...
- cordova-plugin-alipay-v2使用篇(更新至20170725)(亲测可用)
cordova-plugin-alipay-v2使用篇(更新至20170725)(亲测可用) alipaySdk已更新至20170725版本 支付宝WS_APP_PAY_SDK_BASE_2.0 &l ...
- svnadmin - Subversion 仓库管理工具
SYNOPSIS 总览 svnadmin command /path/to/repos [options] [args] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版 ...
- Centos安装mysql5.6.33
下载安装包 百度网盘地址: 链接:https://pan.baidu.com/s/15xaHIqvjggS_rFP_jL-BVA 提取码:mh48 上传到服务器 mkdir mysql #在/us ...
- 笔记67 Spring Boot快速入门(七)
SpringBoot+RESTful+JSON 一.RESTful架构 REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. ...
- MySQL数据库操作:“增删改查”,忘记密码重置等。
[注] 数据库的“增删查改”,参考原作者Wid:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#d11.感谢大佬们的技术分享 ...
- macOS截屏
Command+Shift+3: 全屏幕截屏,并自动保存在桌面 Command+Shift+4: 手动截屏,并自动保存在桌面 Command+Shift+4, + Space, 之后点击程序的窗口,实 ...