目录
Get the first item in a list that matches condition – Python
获取列表中符合条件的第一项 – Python
获取列表中符合条件的第一项:
- 使用生成器表达式迭代列表。
- 检查列表中的每一项是否满足条件。
- 使用该
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
则计算结果为,否则计算结果为。True
x
l
False
或者,您可以使用简单的for 循环。
使用 for 循环获取列表中符合条件的第一项
这是一个四步过程:
- 使用
for
循环来迭代列表。 - 检查每一项是否满足条件。
- 满足条件后,将值分配给变量。
- 使用
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 。
或者,您可以使用较新的赋值表达式语法。
使用赋值表达式获取列表中符合条件的第一项
这是一个两步过程:
- 使用该
any()
函数查找与条件匹配的第一个项目。 - 使用赋值表达式语法将第一个匹配项分配给变量。
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
如果没有元素匹配条件。