过滤 Python 列表的 5 种方法

golang1231年前 ⋅ 2157 阅读

使用 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]

全部评论: 0

    相关推荐