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 教程。