首页 > 代码库 > 在列表,字典,集合中根据条件筛选数据

在列表,字典,集合中根据条件筛选数据

在列表,字典,集合中根据条件筛选数据

案例分析:
1、 过滤列表[3,9,-1,10,20,-2...]中的负数
2、 筛选字典{"A":78,"B":59,"C":82,"D":94...} 中值大于80的项
3、 筛选集合{44,55,66,77,88,99...}中能被3整除的元素
"""
# eg_v1  使用迭代 如:

# data = [1,3,-3,-5,10,5,3,4,-4]
# res = []
# for x in data:
#     if x >= 0:
#         res.append(x)
# print (res)
# # [1, 3, 10, 5, 3, 4]

"""
解决方法:
1、 列表, filter函数 filter(lambda x : x >= 0,data)
列表解析 [ x for x in data if x >= 0 ]
2、 字典, 字典解析 { k:v for k,v in d.items() if v > 90 }
3、 集合, 集合解析 { x for x in s if x % 3 == 0 }
"""


列表解析,取出大于和等于0 的元素
from random import randint
data = [ randint(-10,10) for _ in range(10)]  # 随机生成一个10个元素的列表,在[-10,10] 之间
print (data)
# [1, 8, 2, 6, -8, 2, -1, 0, 1, -5]

# 使用普通的迭代方法
res = []
for x in data:
    if x >= 0:
        res.append(x)
print (res)
# [1, 8, 2, 6, 2, 0, 1]

# 使用 filter函数
data1 = filter(lambda x:x >= 0,data)
res1 = []
for i in data1:
    res1.append(i)
print (res1)
# [1, 8, 2, 6, 2, 0, 1]

# 使用列表解析
res2 =  [ j for j in data if j >= 0]
print (res2)
# [1, 8, 2, 6, 2, 0, 1]
# 分析三种方法,那种运行最快 可以使用 timeit 函数,推荐使用列表解析



字典解析,筛选成绩
d = { x : randint(60,100) for x in range(1,21) }  # 创建20个元素,值在60-100之间
print (d)
# {1: 88, 2: 98, 3: 73, 4: 94, 5: 83, 6: 76, 7: 78, 8: 85, 9: 78, 10: 69, 11: 95, 12: 64, 13: 77, 14: 75, 15: 84, 16: 79, 17: 79, 18: 90, 19: 79, 20: 72}

# 根据值,筛选值大于等于80 的字典
values = { k : v for k , v in d.items() if v >= 80 }
print (values)
# {1: 88, 2: 98, 4: 94, 5: 83, 8: 85, 11: 95, 18: 90, 15: 84}

  


集合解析,筛选能被3整除的元素
from random import randint
set0 = [ randint(-10,10) for _ in range(10)]
set1 = set(set0)  # 将列表转行为集合
print (set1)
# {0, 4, 5, 6, 8, -9, -8, -1}

set2 = { x for x in set1 if x % 3 == 0}
print (set2)
# {0, 6, -9}

  

 

在列表,字典,集合中根据条件筛选数据