Python 编程骚操作连载(一)- 字符串、列表、字典和集合的处理

一、列表、字典和集合处理

你知道几种在列表、字典和集合中筛选符合条件的数据的方式 ?

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)
复制代码

执行上述代码,输出结果如下: image.png 遍历所有数据并进行判断,效率较低

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)
复制代码

执行上述代码,输出结果如下: image.png

列表解析筛选出列表中符合条件的数据

nums = [1, -1, 10, 2, 5, -9, -8, 7]
_nums = [num for num in nums if num > 0]


if __name__ == '__main__':

    print(_nums)
复制代码

执行上述代码,输出结果如下: image.png

列表解析的解决方式比 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)
复制代码

执行上述代码,输出结果如下 image.png

集合解析筛出集合中符合条件的元素

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)
复制代码

执行上述代码,输出结果如下:

image.png

猜你喜欢

转载自juejin.im/post/7107639422270586894