python - 更好/更快地循环遍历集合或列表?

标签 python list loops set

如果我有一个包含许多重复项的 python 列表,并且我想遍历每个项目,而不是重复项,最好使用一个集合(如 set(mylist),或者找到另一种方法来创建没有重复的列表?我想只是循环遍历列表并检查重复,但我认为这就是 set() 在初始化时所做的。

所以如果 mylist = [3,1,5,2,4,4,1,4,2,5,1,3] 我真的只想循环遍历 [1,2,3,4,5](顺序无关紧要),我应该使用 set(mylist) 还是别的什么?

在最后一个示例中可能有另一种选择,因为列表包含其最小值和最大值之间的每个整数,我可以循环通过 range(min(mylist),max(mylist)) 或通过set(mylist)。在这种情况下,我通常应该尽量避免使用 set 吗?另外,查找 minmax 会比创建 set 慢吗?


在上一个例子的情况下,set 更快:

from numpy.random import random_integers
ids = random_integers(1e3,size=1e6)

def set_loop(mylist):
    idlist = []
    for id in set(mylist):
        idlist.append(id)
    return idlist

def list_loop(mylist):
    idlist = []
    for id in range(min(mylist),max(mylist)):
        idlist.append(id)
    return idlist

%timeit set_loop(ids)
#1 loops, best of 3: 232 ms per loop

%timeit list_loop(ids)
#1 loops, best of 3: 408 ms per loop

最佳答案

只需使用 set。它的语义正是您想要的:独特项目的集合。

从技术上讲,您将遍历列表两次:一次用于创建集合,一次用于您的实际循环。但是使用任何其他方法,您会做同样多的工作或更多。

关于python - 更好/更快地循环遍历集合或列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102052/

相关文章:

python - 将参数从 WHEN 传递给 THEN

python - 如何在不创建新列表的情况下增加列表中的数字?

python - python 中的 Observer 可观察类

scala - 定义一个二维列表并在 for 循环中向其 append 列表,scala

android - 在应用程序小部件中列出

python - 是否可以在 python 中循环遍历运算符(大于/小于)?

python - Flask 函数调用同一个应用程序中的其他 Flask 函数?

R 中的 R 绑定(bind)和合并

c - do-while 循环只迭代一次月供

loops - 解释如何矢量化循环