一:背景
最近有人问到过这个问题所以就写写自己知道的几种写法。
二:问题
已知列表 a = [1,2,3,4,5,6,1,2,3]
将列表a去重,然后将偶数乘以二保存到空白列表b中
三:写法
1.一般写法,当数据量大的时候对内存消耗大
b = []
for i in set(a):
if i%2 == 0:
b.append(i*2)
print(b)
该写法的列表推导式简写
b = [i*2 for i in set(a) if i%2 == 0]
print(b)
2.通过yield关键字将函数创建成生成器,内存消耗小
def filterEven(l):
for i in l:
if i%2 == 0:
yield i*2
b = list(filterEven(set(a)))
print(b)
3.使用filter()和map()配合使用
filter() 函数来对列表进行筛选,注意Python2返回的是列表,3返回的是filter类
map() 会根据提供的函数对指定序列做映射,Python 2.x 返回列表,Python 3.x 返回迭代器。
b = list(map(lambda x: x * 2, filter(lambda l:l%2 == 0,set(a))))
print(b)
4.使用filter()和列表推导式简写
b = [i*2 for i in filter(lambda l:l%2 == 0,set(a))]
print(b)
5.使用filter()和生成器表达式
b = (i*2 for i in filter(lambda l:l%2 == 0,set(a)))
print(b)
6.使用生成器表达式
b = (i*2 for i in set(a) if i%2 == 0)
print(list(b))
最后:如果后续看到新的方法,在添加,如果哪位朋友有其它的一些方法可以留言或 私信与我沟通。