背景
假设我们要处理的 list 为:
range(-5, 5) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
上面这个 list 只是个例子,其实不止 list,本文适用的对象是所有 iterables ,比如 list、 tuple、set 等 sequence 类型,也可以是字符串、甚至是自定义的对象。简单来说,iterables 是可以使用 for 的对象。
下面看看如何提取出 list 里所有的正数:
方法一:for 循环
result = []
index = []
for i, x in enumerate(range(-5, 5)):
if x > 0:
result.append(x)
index.append(i)
方法二:列表解析 List comprehension
result = [x for x in range(-5, 5) if x>0]
index = [i for i,x in enumerate(range(-5, 5)) if x>0]
方法三:filter 函数
filter 函数和 列表解析 是等效的,即
filter(function, iterable)
等效于
[item for item in iterable if function(item)]
所有能让 function 得到 True 的值,都被放入 filter 的返回集合。
def pos(x):
return x>0
result = filter(pos, range(-5,5))
或者使用匿名函数 Lambda 表达式:
result = filter(lambda x:x>0, range(-5,5))