如何在列表, 字典, 集合中根据条件筛选数据
问题举例:
过滤列表 [1, 2, 5, -1, 9, 10] 中的负数
筛选字典 {"zhangsan":97, "lisi":80, "wangwu":60, "liqiang":91} 中的值高于 90 的键值对
筛选集合 {89, 70, 60, 80, 90} 中能被 3 整除的元素
列表
一般遇到这种问题, 我们首先会想到用 for 循环的方式去解决
(1)for 循环
- from random import randint
- nums = [randint(-10, 10) for _ in range(20)] #生成一个列表
- res_list = []
- for ele in nums:
- if ele> 0:
- res_list.append(ele)
但是这种方式并不 pythonic
(2)列表解析
- from random import randint
- nums = [randint(-10, 10) for _ in range(20)]
- res_list = [ele for ele in nums if ele> 0] #list comprehension
(3)filter 函数
- from random import randint
- nums = [randint(-10, 10) for _ in range(20)]
- res_filter = filter(lambda x: x> 0, nums) #filter
- res_list = list(res_filter)
字典
(1)字典解析
- from random import randint
- grade_info = {
- "stu%d" % i: randint(50, 100) for i in range(10)
- }
- res_dict = {
- k: v for k, v in grade_info.items() if v> 70
- }
(2)filter 函数
集合
集合解析
- from random import randint
- nums_set = {
- randint(10, 20) for _ in range(20)
- }
- nums_res = {
- ele for ele in nums_set if ele % 3 == 0
- }
参考资料: python3 实用编程技巧进阶 https://coding.imooc.com/class/213.html
来源: http://www.bubuko.com/infodetail-3026146.html