一、列表、字典和集合处理
你知道几种在列表、字典和集合中筛选符合条件的数据的方式 ?
for 循环
筛选出列表中大于0的元素
def filter_positive_by_for_from_list(nums):
_nums = []
for num in nums:
if num > 0:
_nums.append(num)
return _nums
if __name__ == '__main__':
nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = filter_positive_by_for_from_list(nums)
print(_nums)
执行上述代码,输出结果如下: 遍历所有数据并进行判断,效率较低
filter()
函数筛选列表中符合条件的数据
使用 filter() + lambda
nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = list(filter(lambda x: x >= 0, nums))
if __name__ == '__main__':
print(_nums)
执行上述代码,输出结果如下:
列表解析
筛选出列表中符合条件的数据
nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = [num for num in nums if num > 0]
if __name__ == '__main__':
print(_nums)
执行上述代码,输出结果如下:
用列表解析
的解决方式比 filter()
函数的解决方式要高效,但是这两种方式都远快于通过 for 循环
的解决方式
字典解析
筛出字典中符合条件的元素
dict_data = {
"peter": 80,
"stark": 99,
"thor": 60,
"banner": 98,
"clint": 80
}
# 筛选出 value 大于 90 的键值对
_dict_data = {k : v for k, v in dict_data.items() if v > 90}
print(_dict_data)
执行上述代码,输出结果如下
集合解析
筛出集合中符合条件的元素
d = [1, 2, 2, 3, -3, 9, 0, 11, 20, 33]
set_data = set(d)
# 删除除以 2 余数为 0 的元素
_set_data = {x for x in set_data if x % 2 == 0}
print(_set_data)
执行上述代码,输出结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8175218fdf632831c918ffabc486657f.png)