ZetCode

Python 过滤列表

最后修改于 2024 年 1 月 29 日

Python 列表过滤教程展示了如何在 Python 中过滤列表。

过滤

过滤操作处理一个数据结构(例如列表),并生成一个新的数据结构,其中只包含给定谓词返回 true 的那些元素。

谓词是一个返回布尔值的单参数函数。

使用列表推导式过滤 Python 列表

列表推导式是一种语法结构,它基于现有列表创建列表。

列表推导式创建一个新列表。它基于现有列表。for 循环遍历序列。对于每一次循环,如果满足条件,则评估一个表达式。如果计算出值,则将其附加到新列表中。条件是可选的。

list_compr.py
#!/usr/bin/python

a = [-2, 1, -4, 2, 0, -1, 12, -3]

b = [e for e in a if e > 0]
print(b)

我们有一个整数列表。我们创建一个新的正整数列表。

b = [e for e in a if e > 0]

为了过滤掉正数,我们使用了一个 if 条件,该条件应用于每个元素;只有当元素满足条件时,它们才会被包含在新列表中。

$ ./list_compr.py
[1, 2, 12]

偶数是能被 2 整除的整数。奇数是不能被精确地分成两对的整数。

list_compr2.py
#!/usr/bin/python

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

b = [e for e in a if e % 2]
print(b)

该示例创建一个新的过滤后的奇数值列表。为了得到一个奇数,我们使用了 % 运算符。

$ ./list_compr2.py
[1, 3, 5, 7, 9, 11]

我们可以根据数据类型过滤值。

list_compr3.py
#!/usr/bin/python

a = ['a', 4, 'c', 12, 'e', 3, 'd']

b = [e for e in a if type(e) == int]
c = [e for e in a if type(e) == str]

print(b)
print(c)

在示例中,我们有一个混合了整数和字符串的列表。我们将整数和字符串分别放入两个新列表中。

b = [e for e in a if type(e) == int]

我们使用 type 内置函数来确定值的类型。

$ ./list_compr3.py
[4, 12, 3]
['a', 'c', 'e', 'd']

我们可以在列表推导式中使用多个条件。

list_compr4.py
#!/usr/bin/python

a = [9, -2, 5, 14, 22, -11, 7, -19, 23]

b = [e for e in a if e % 2 == 0 if e > 0]
print(b)

该示例过滤掉所有是偶数的正数。

$ ./list_compr4.py
[14, 22]

使用 filter 函数过滤 Python 列表

filter 是一个内置函数,它从可迭代对象中返回满足给定谓词的元素组成的迭代器。该函数早于列表推导式出现;通常建议使用列表推导式。

filter_fun.py
#!/usr/bin/python

words = ['sky', 'cloud', 'wood', 'forest', 'tie', 'nice', 'cup']

filtered = filter(lambda e: len(e) == 3, words)
print(list(filtered))

使用 filter 函数,我们找出所有长度为三个字符的单词。

filtered = filter(lambda e: len(e) == 3, words)

作为谓词,我们有一个匿名函数,它检查当前元素的长度。

print(list(filtered))

filter 函数返回一个迭代器;为了查看元素,我们将迭代器传递给 list 函数。

$ ./filter_fun.py 
['sky', 'tie', 'cup']

使用自定义算法过滤 Python 列表

下面的示例使用自定义算法过滤列表。

custom_filter.py
#!/usr/bin/python

vals = [-1, 2, 0, 11, 9, -3, -4, 3]
positive = []

for val in vals:
    if val > 0:
        positive.append(val)

print(positive)

我们使用 for 循环和一个 if 条件来过滤掉所有正数。

$ ./custom_filter.py 
[2, 11, 9, 3]

来源

Python 数据结构 - 语言参考

在本文中,我们过滤了 Python 中的列表。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Python 教程