数据结构与算法相关问题(一)------列表、集合、字典中根据条件筛选数据

我们在实际工作中经常遇到这类问题,比如

过滤掉字典[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}

 

posted @ 2020-03-15 00:45  覆水难收d  阅读(152)  评论(0编辑  收藏  举报