我有一个[index:boolean]
形式的大列表(1e8 +个条目)。我想找到值为True的索引。 在此任务中的表现至关重要。
目前,根据我在Python 3.7.2中的了解,执行此操作的最佳方法是使用列表理解,如下所示:
return [i for i, j in enumerate(numbers) if j]
我还尝试了以下方法(尽管它似乎只是早期Python版本中的首选方法):
return list(filter(lambda a: a, numbers))
第二种方法比第一种方法慢25%。
当前,此操作大约需要(0.8 * x)的时间,而我算法的实际逻辑部分则需要'x'的时间。 (例如,如果逻辑花费10秒,则从列表中提取正值大约需要8秒钟)。我曾希望此操作会更快。
答案 0 :(得分:0)
在这项任务中的表现至关重要。
然后,您应该考虑使用numpy数组:
import numpy as np
from random import choice
from timeit import Timer
bools = True, False
li = [choice(bools) for _ in range(int(1e8))]
arr = np.array(li)
print(Timer(lambda: np.nonzero(arr)).repeat(1, 1))
输出
[0.4524359999999916]
那是0.4524359999999916
秒。