这篇文章要讨论的是,如何用 Python 提取出一个序列中,符合特定条件的所有元素。例如,找出序列里的所有正数、所有以 Wang 结尾的名字、等等 背景 假设我们要处理的 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))