在 Python 中查找满足条件的元素的索引

目录

Find the index of elements that meet a condition in Python

  1. 在 Python 中查找满足条件的元素的索引
  2. 获取第一个符合条件的 List 元素的索引

在Python中查找满足条件的元素索引

查找满足条件的元素的索引:

  1. 使用列表理解来迭代range对象。
  2. 检查是否满足条件,如果满足则返回相应的索引。
  3. 新列表将只包含满足条件的元素的索引。
主程序
my_list = [4, 8, 12, 16, 25] indexes = [ index for index in range(len(my_list)) if my_list[index] > 10 ] print(indexes) # 👉️ [2, 3, 4]

我们使用
列表理解来迭代包含range列表中索引的对象。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

范围通常用于循环特定次数。

主程序
my_list = [4, 8, 12, 16, 25] print(list(range(len(my_list)))) # 👉️ [0, 1, 2, 3, 4] print(list(range(5))) # 👉️ [0, 1, 2, 3, 4]

我们使用列表的长度来构造一个range包含列表中所有索引的对象。

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

主程序
my_list = [4, 8, 12, 16, 25] indexes = [ index for index in range(len(my_list)) if my_list[index] > 10 ] print(indexes) # 👉️ [2, 3, 4]

新列表只包含满足条件的元素的索引。

您可以使用此方法获取列表中满足任何条件的元素的索引。

主程序
my_list = ['bobby', 'ab', 'cd', 'bobbyhadz.com'] indexes = [ index for index in range(len(my_list)) if my_list[index].startswith('bobby') ] print(indexes) # 👉️ [0, 3]

该示例查找以特定子字符串开头的元素的索引。

使用 NumPy 查找满足条件的元素的索引

如果你使用 NumPy,你也可以使用该numpy.where()方法。

主程序
import numpy as np my_list = np.array([4, 8, 12, 16, 25]) indexes = np.where(my_list > 10)[0] print(indexes) # 👉️ [2 3 4] indexes = np.nonzero(my_list > 10)[0] print(indexes) # 👉️ [2 3 4]

确保安装
了 NumPy 模块以便能够运行代码示例。

pip install numpy # 👇️ or pip3 pip3 install numpy

当只提供一个条件时,
numpy.where
方法返回满足条件的元素的索引。

或者,您可以使用for 循环

使用for循环查找满足条件的元素索引

这是一个四步过程:

  1. 声明一个存储空列表的新变量。
  2. 使用for循环迭代原始列表enumerate()
  3. 检查每次迭代是否满足条件。
  4. 将匹配的索引附加到新列表。
主程序
my_list = [4, 8, 12, 16, 25] indexes = [] for index, item in enumerate(my_list): if item > 10: indexes.append(index) print(indexes) # 👉️ [2, 3, 4]

我们使用该enumerate()函数来访问当前迭代的索引。

enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目

主程序
my_list = ['bobby', 'hadz', 'com'] for index, item in enumerate(my_list): print(index, item) # 👉️ 0 bobby, 1 hadz, 2 com

在每次迭代中,我们检查当前元素是否满足条件。

如果满足条件,我们使用该list.append()方法将当前索引附加到新列表。

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

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

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

获取第一个符合条件的列表元素的索引

要获取与条件匹配的第一个列表元素的索引:

  1. 使用生成器表达式迭代列表enumerate()
  2. 检查每个列表项是否满足条件,并返回对应的索引。
  3. 将结果传递给next()函数。
主程序
my_list = [2, 14, 29, 34, 72, 105] index_first_match = next( (index for index, item in enumerate(my_list) if item > 29), None ) print(index_first_match) # 👉️ 3 if index_first_match is not None: print(my_list[index_first_match]) # 👉️ 34

我们将
生成器表达式传递
next()函数。

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

我们使用该enumerate()函数来访问当前迭代的索引。

enumerate函数接受一个可迭代对象并返回一个包含元组的枚举对象,其中第一个元素是索引,第二个元素是相应的项目

主程序
my_list = ['bobby', 'hadz', 'com'] for index, item in enumerate(my_list): print(index, item) # 👉️ 0 bobby, 1 hadz, 2 com

在每次迭代中,我们检查当前列表项是否大于29,如果满足条件,我们返回当前索引。

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

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

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

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

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

主程序
my_list = [2, 14, 29] index_first_match = next( (index for index, item in enumerate(my_list) if item > 29), None ) print(index_first_match) # 👉️ None if index_first_match is not None: print(my_list[index_first_match]) else: # 👇️ this runs print('No list element meets the condition')

列表中没有一项满足条件,所以
None返回默认值 。

或者,您可以使用for循环。

使用 for 循环获取第一个匹配条件的列表元素的索引

这是一个三步过程:

  1. 使用for循环遍历列表enumerate()
  2. 检查每个列表项是否满足条件。
  3. 如果满足条件,则将相应的索引赋给一个变量。
主程序
my_list = [2, 14, 29, 34, 72, 105] index_first_match = None for index, item in enumerate(my_list): if item > 29: index_first_match = index break print(index_first_match) # 👉️ 3 if index_first_match is not None: # 👇️ this runs print(my_list[index_first_match]) # 👉️ 34 else: print('No list element meets the condition')

我们使用for循环来迭代一个enumerate对象。

在每次迭代中,我们检查当前列表项是否满足条件。

如果满足条件,我们将当前索引分配给index_first_match
变量并退出
for循环。

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

一旦找到满足条件的列表项,就无需继续迭代。

如果列表中没有项目满足条件,则index_first_match变量保持不变None

如果你需要找到所有满足条件的列表元素的索引,将它们存储在一个列表中。

主程序
my_list = [4, 8, 14, 27, 35, 87] indices = [] for index, item in enumerate(my_list): if item > 8: indices.append(index) print(indices) # 👉️ [2, 3, 4, 5]

We removed the break statement and used the list.append() method to append
the matching indices to the list.

The list.append() method
adds an item to the end of the list.

main.py
my_list = ['bobby', 'hadz'] my_list.append('com') print(my_list) # 👉️ ['bobby', 'hadz', 'com']

Which approach you pick is a matter of personal preference. I’d use the next()
function because it’s just as readable and a little more concise.

# Additional Resources

You can learn more about the related topics by checking out the following
tutorials: