如何查找列表中某个元素的所有匹配项?

2024-03-28 20:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

^{}将只给出列表中某个项的第一次出现。有没有一个简单的技巧可以返回列表中的所有索引?


Tags: 列表技巧
3条回答

虽然不是直接针对列表的解决方案,但numpy对于这类事情确实很有帮助:

import numpy as np
values = np.array([1,2,3,1,2,4,5,6,3,2,1])
searchval = 3
ii = np.where(values == searchval)[0]

返回:

ii ==>array([2, 8])

对于包含大量元素的列表(数组),这比其他一些解决方案要快得多。

您可以使用列表理解:

indices = [i for i, x in enumerate(my_list) if x == "whatever"]

使用list.index的解决方案:

def indices(lst, element):
    result = []
    offset = -1
    while True:
        try:
            offset = lst.index(element, offset+1)
        except ValueError:
            return result
        result.append(offset)

对于大型列表,它比使用enumerate进行列表理解快得多。如果已经有了数组,它也比numpy解决方案慢得多,否则转换的成本超过了速度增益(在包含100、1000和10000个元素的整数列表上测试)。

注意:基于Chris_Rands评论的注意事项:如果结果足够稀疏,则此解决方案比列表理解快,但如果列表中有正在搜索的元素的多个实例(在1000个整数的列表中,超过列表的约15%),则列表理解快。

相关问题 更多 >