Python根据条件筛选列表,字典,集合中元素

Python根据条件筛选列表,字典,集合中元素,第1张

1、如何在列表、字典、集合中根据条件筛选数据

        实际案例:

        (1)过滤掉列表 [3, 9, -1, 10, 20, -2 ...] 中的负数

        (2)筛出字典 {'LiLei':79, 'Jim':88, 'Lucy':92 ...} 中值高于90的项

        (3)筛出集合 {77, 89, 32, 20 ...} 中能被3整除的元素

        注:最通用的一种做法就是迭代。

2、代码演示

(1)过滤掉列表 [3, 9, -1, 10, 20, -2 ...] 中的负数

# 方法一:通用做法迭代,过滤掉列表中负数
data = [1, 5, -3, -2, 6, 0, 9]
res = []
for x in data:
    if x >= 0:
        res.append(x)
print(res)
# 输出结果:[1, 5, 6, 0, 9]

# 方法二:函数式编程
# 导入random,生成10个元素的随机列表
from random import randint
data = [randint(-10, 10) for _ in range(10)]
# 打印过滤前列表
print(data)
# 打印过滤后的列表,注意filter的返回值是一个对象需要使用list()转换
print(list(filter(lambda x: x >= 0, data)))
# 输出结果:
    [5, -2, -2, 0, 6, 4, -7, -8, 7, 9]
    [5, 0, 6, 4, 7, 9]

# 方法三:列表解析(首选)
data = [1, 5, -3, -2, 6, 0, 9]
print([x for x in data if x >= 0])
# 输出结果: [1, 5, 6, 0, 9]

      使用filter()函数式编程和列表解析哪种方式好?

            可以用timeit.timeit()进行测试查看那种运行时间更短,列表解析方式运行时间大概是filter()函数式编程一半,所以列表解析更快一些。

(2)筛出字典 {'LiLei':79, 'Jim':88, 'Lucy':92 ...} 中值高于90的项

from random import randint

# 随机生成一个字典,20个人成绩
d = {x: randint(60, 100) for x in range(1, 20)}
print(d)
# 字典解析,根据值过滤出分数高于90的同学,注:Python2使用iteritems()
print({k: v for k, v in d.items() if v > 90})
# 运行结果:
{1: 64, 2: 65, 3: 78, 4: 74, 5: 68, 6: 95, 7: 66, 8: 83, 9: 77, 10: 83, 
11: 84, 12: 74, 13: 83, 14: 75, 15: 99, 16: 93, 17: 87, 18: 80, 19: 74}
{6: 95, 15: 99, 16: 93}

(3)筛出集合 {77, 89, 32, 20 ...} 中能被3整除的元素

data = [5, -4, -10, -5, -5, 5, 2, 4, 3, -9]
# 将列表转成集合
s = set(data)
print(s)
# 集合解析,过滤出能被3整除的子集
print({x for x in s if x % 3 == 0})

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/734684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存