2024-03-28 20:03:07 发布
网友
^{}将只给出列表中某个项的第一次出现。有没有一个简单的技巧可以返回列表中的所有索引?
虽然不是直接针对列表的解决方案,但numpy对于这类事情确实很有帮助:
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的解决方案:
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个元素的整数列表上测试)。
enumerate
注意:基于Chris_Rands评论的注意事项:如果结果足够稀疏,则此解决方案比列表理解快,但如果列表中有正在搜索的元素的多个实例(在1000个整数的列表中,超过列表的约15%),则列表理解快。
虽然不是直接针对列表的解决方案,但
numpy
对于这类事情确实很有帮助:返回:
对于包含大量元素的列表(数组),这比其他一些解决方案要快得多。
您可以使用列表理解:
使用
list.index
的解决方案:对于大型列表,它比使用
enumerate
进行列表理解快得多。如果已经有了数组,它也比numpy
解决方案慢得多,否则转换的成本超过了速度增益(在包含100、1000和10000个元素的整数列表上测试)。注意:基于Chris_Rands评论的注意事项:如果结果足够稀疏,则此解决方案比列表理解快,但如果列表中有正在搜索的元素的多个实例(在1000个整数的列表中,超过列表的约15%),则列表理解快。
相关问题 更多 >
编程相关推荐