当前位置:   article > 正文

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

python筛选列表元素

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 ...] 中的负数

  1. # 方法一:通用做法迭代,过滤掉列表中负数
  2. data = [1, 5, -3, -2, 6, 0, 9]
  3. res = []
  4. for x in data:
  5. if x >= 0:
  6. res.append(x)
  7. print(res)
  8. # 输出结果:[1, 5, 6, 0, 9]
  9. # 方法二:函数式编程
  10. # 导入random,生成10个元素的随机列表
  11. from random import randint
  12. data = [randint(-10, 10) for _ in range(10)]
  13. # 打印过滤前列表
  14. print(data)
  15. # 打印过滤后的列表,注意filter的返回值是一个对象需要使用list()转换
  16. print(list(filter(lambda x: x >= 0, data)))
  17. # 输出结果:
  18. [5, -2, -2, 0, 6, 4, -7, -8, 7, 9]
  19. [5, 0, 6, 4, 7, 9]
  20. # 方法三:列表解析(首选)
  21. data = [1, 5, -3, -2, 6, 0, 9]
  22. print([x for x in data if x >= 0])
  23. # 输出结果: [1, 5, 6, 0, 9]

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/210041
推荐阅读
相关标签
  

闽ICP备14008679号