获取列表中与条件匹配的第一项 – Python

目录

Get the first item in a list that matches condition – Python

  1. 获取列表中符合条件的第一项
  2. 使用 for 循环获取列表中匹配条件的第一项
  3. 使用赋值表达式获取列表中与条件匹配的第一项
  4. 使用 filter() 获取列表中匹配条件的第一项

获取列表中符合条件的第一项 – Python

获取列表中符合条件的第一项:

  1. 使用生成器表达式迭代列表。
  2. 检查列表中的每一项是否满足条件。
  3. 使用该next()函数获取第一个满足条件的项目。
主程序
my_list = [1, 3, 7, 14, 29, 35, 105] first_match = next( (item for item in my_list if item > 14), None ) print(first_match) # 👉️ 29

可以使用相同的方法来获取与条件匹配的任何可迭代对象中的第一项。可迭代对象不一定是对象list

我们使用生成器表达式来遍历列表。

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们检查当前列表项是否大于14并返回结果。

next ()函数从提供的迭代器返回下一个项目。

该函数可以传递一个默认值作为第二个参数。

如果迭代器耗尽或为空,则返回默认值。

如果迭代器耗尽或为空且未提供默认值,则会引发异常。 StopIteration

我们指定了默认值,None但您可以使用任何其他值。

主程序
my_list = [1, 3, 7, 14] first_match = next( (item for item in my_list if item > 14), None ) print(first_match) # 👉️ None

列表中没有任何项目满足条件,因此返回默认值。

您可以使用此方法获取列表中与任何条件匹配的第一项。

主程序
my_list = ['bobby', 'hadz', 'com'] first_match = next( (item for item in my_list if 'bo' in item), None ) print(first_match) # 👉️ bobby

我们使用in运算符来获取包含特定子字符串的第一个列表项。

in 运算符测试成员资格。例如,如果是 的成员
x in l则计算结果为,否则计算结果为TruexlFalse

或者,您可以使用简单的for 循环

使用 for 循环获取列表中符合条件的第一项

这是一个四步过程:

  1. 使用for循环来迭代列表。
  2. 检查每一项是否满足条件。
  3. 满足条件后,将值分配给变量。
  4. 使用break语句来跳出循环for
主程序
my_list = [1, 3, 7, 14, 29, 35, 105] first_match = None for item in my_list: if item > 29: first_match = item break print(first_match) # 👉️ 35

我们使用for循环遍历列表。

在每次迭代中,我们检查当前列表项是否大于29

如果满足条件,我们将项目的值分配给变量并退出循环。 first_match

break语句跳出最内层的封闭for循环while

一旦我们找到第一个满足条件的项目,就不需要继续迭代。

如果需要查找所有满足条件的列表项,则将匹配的元素追加到列表中并删除该break语句。

主程序
my_list = [1, 3, 7, 14, 29, 35, 105] matches = [] for item in my_list: if item > 29: matches.append(item) print(matches) # 👉️ [35, 105]

list.append ()方法将一个项目添加到列表的末尾。

主程序
my_list = ['bobby', 'hadz'] my_list.append('com') print(my_list) # 👉️ ['bobby', 'hadz', 'com']

该方法在改变原始列表时返回 None 。

或者,您可以使用较新的赋值表达式语法。

使用赋值表达式获取列表中符合条件的第一项

这是一个两步过程:

  1. 使用该any()函数查找与条件匹配的第一个项目。
  2. 使用赋值表达式语法将第一个匹配项分配给变量。
主程序
my_list = [1, 3, 7, 14, 29, 35, 105] if any((match := item) > 29 for item in my_list): # 👇️ this runs print(match) # 👉️ 35 else: print('None of the items in the list meets the condition')

:=语法在 Python 中称为
赋值表达式

赋值表达式允许我们使用语法分配给表达式中的变量NAME := expression

Any函数接受一个可迭代对象作为参数,如果可迭代对象中的任何元素为真,则返回。True

在每次迭代中,我们检查当前项是否大于29

如果满足条件,则项目的值将分配给match
变量并且
if块运行。

如果从未满足条件,则else块运行。

使用 filter() 获取列表中匹配条件的第一项

您还可以使用该filter()函数获取列表中与条件匹配的第一项。

主程序
my_list = [1, 3, 7, 14, 29, 35, 105] first_match = next(filter(lambda x: x > 14, my_list), None) print(first_match) # 👉️ 29

filter函数接受一个函数和一个可迭代对象作为参数并从可迭代对象的元素构造一个迭代器,函数返回一个真值。

我们传递给的 lambda 函数会filter针对列表中的每个元素进行调用。

该函数检查每个元素是否大于数字14并返回结果。

next()函数返回第一个匹配的元素,或者None如果没有元素匹配条件。