使用 for 循环、列表理解、正则表达式、filter() 和 lambda 函数过滤列表元素。
1.使用for循环
通过使用 for 循环和 if-else 语句,我们将遍历列表并选择符合特定条件的元素。在我们的例子中,我们将过滤掉大于或等于 100 的利润。
通过使用此方法,我们正在创建一个新列表并将过滤后的值添加到新列表中。这是过滤列表的一种简单但效率不高的方法。
profits =[200,400,90,50,20,150]
filtered_profits =[]
for p in profits:
if p >=100:
filtered_profits.append(p)
print(filtered_profits)
[200,400,150]
2.列表理解
列表理解是一种在列表上使用 for 循环和 if-else 条件的聪明方法。您可以将方法一翻译成一行代码。它是干净的。
在我们的例子中,我们对所有列表元素运行循环并选择大于或等于 150 的分数。
它易于编写,您甚至可以毫无问题地添加多个 if-else 条件。
通过阅读何时在 Python 中使用列表推导式,通过代码示例学习列表推导式。
scores =[200,105,18,80,150,140]
filtered_scores =[s for s in scores if s >=150]
print(filtered_scores)
[200,150]
3. 模式匹配
要过滤字符串列表,我们将使用 re.match()
。它需要字符串模式和字符串。
在我们的例子中,我们使用列表理解来过滤掉以“N”开头的名称,方法是向“re.match()”提供“N.*”的正则表达式模式。
您可以通过访问regex101来学习、构建和测试正则表达式模式。
import re
students =["Abid","Natasha","Nick","Matthew"]
# regex pattern
pattern ="N.*"
# Match the above pattern using list comprehension
filtered_students =[x for x in students if re.match(pattern, x)]
print(filtered_students)
['Natasha','Nick']
4.使用filter()方法
filter()
是一个内置的 Python 函数,用于过滤列表项。它需要一个过滤函数和列表filter(fn, list)
。
在我们的例子中,我们将创建一个filter_height函数。当高度小于 150 时返回True否则返回 False 。
之后,我们将使用 filter() 函数将 filter_height 函数应用于列表,作为回报,我们得到过滤元素的迭代器。您可以使用循环来提取所有元素,也可以使用 list(<iter>)
函数将其转换为列表。
def filter_height(height):
if(height <150):
returnTrue
else:
returnFalse
heights =[140,180,165,162,145]
filtered_heights = filter(filter_height, heights)
print(list(filtered_heights))
[140,145]
5. 使用 Lambda 函数
您可以使用 lambda 函数将方法四(filter() 方法)转换为一行。
我们可以使用 lambda 在 filter()
函数中编写条件, 而不是单独创建filter_age函数。
在我们的例子中,我们正在过滤大于 50 的年龄并将过滤后的迭代器转换为列表。
按照Python Lambda教程了解有关 lambda 函数的更多信息。
ages =[20,33,44,66,78,92]
filtered_ages = filter(lambda a: a >50, ages)
print(list(filtered_ages))
[66,78,92]