案例 1 :对列表中的数据进行筛选。
如 list1=[-1,2,-3,-4,-5,6,76,3,23,12] 在列表中过滤掉负数,只保留列表中的正数
使用列表解析式生成一个含有正数和负数的随机列表 (使用random中的randint方法)
使用迭代for循环和列表解析式
from random import randint
list1=[randint(-10,10) for x in range(15)]
res=[]
#使用迭代
for one in list1:
if one>=0:
res.append(one)
#使用解析式
#res = [one for one in list1 if one >= 0]
print(res)
使用解析式和迭代 输出的结果是一样的 。
因为效率问题,当数据量过大,优先使用解析式。
案例2:筛选出字典中符合条件的值,比如学生成绩字典,筛选出成绩大于90的同学
d1 = {x:randint(60,100) for x in range(1,21)}
d2 = {k:v for k,v in d1.items if v>=90}
print(d1)
print(d2)
d1={k:randint(60,100) for k in range(1,21)}
k是键,作为学生的学号,由range(1,21)生成1-20个学号,而值(成绩分数)是由随机函数生成60-100之间的分数。
d2={k:v for k,v in d1.items() if v>=90}
使用字典解析
案例3 筛选出集合中可以被3整除的数值
from random import randint
data1 = {randint(1,100) for x in range(30)}
data2 = {x for x in data1 if x%3==0}
print(data1)
print(data2)
总结
生成列表,字典,集合 解析式 :
list1=[randint(-10,10) for x in range(15)] 列表 res=[one for one in list1 if one>=0]
d1={k:randint(60,100) for k in range(1,21)} 字典 d2={k:v for k,v in d1.items() if v>90}
data={randint(1,100) for x in range(30)} 集合 data1={x for x in data if x%3==0}