数据结构与算法相关问题(一)------列表、集合、字典中根据条件筛选数据
我们在实际工作中经常遇到这类问题,比如
过滤掉字典[3, 9-1, 10, 20, -2 ... ]中的负数
筛出字典{'Lilei': 79, 'Jim': 88, 'Lucy': 92 ...}中值高于90的项
筛出集合{77, 89, 32, 20 ...}中能被3整除的元素
处理这类问题,最通用的方法就是使用for循环进行迭代,然后再加上一个if判断进行过滤。这样的方法大家肯定都会的,而且在python中使用这样的方法就显得太啰嗦了,而且执行效率也会很差,在python中我们可以使用一些高级的工具进行过滤
解决方案
列表
列表解析: [x for x in data if x >= 0]
# 生成列表 from random import randint l = [randint(-10, 10) for _ in range(10)] # 过滤掉列表中的负数 [x for x in l if x >= 0]
filter函数:filter(lambda x: x >= 0, data)
# 使用filter()函数 g = filter(lambda x: x >= 0, l) print(list(g))
字典
字典解析:{k: v for k, v in d.items() if v > 90}
# 创建学生成绩字典 d = {'student%d' % i: randint(80, 100) for i in range(1, 21)} # 过滤成绩在90分之上的数据 {k: v for k, v in d.items() if v >= 90}
集合
集合解析:{x for x in s if x % 3 == 0}
# 创建集合 s = {randint(0, 20) for _ in range(20)} # 找到集合中能被3整除的数 {x for x in s if x % 3 == 0}