如果我有一个Python列表是有很多重复,我想通过每个项目迭代,但不是通过重复的,是它最好使用一组(如set(mylist)
,或者找到另一种方式来创建一个列表,而不重复?我是通过[1,2,3,4,5]
思考的只是通过列表循环和检查重复,但我想这是当它的初始化set()
做什么。更好/更快通过设置或列表循环?
所以,如果mylist = [3,1,5,2,4,4,1,4,2,5,1,3]
,我真的只是想环路(顺序并不重要),我应该使用set(mylist)
还是其他什么东西?
另一种可能是在最后一个例子,因为该列表包含了分钟和M之间的每个整数ax值,我可以循环通过range(min(mylist),max(mylist))
或通过set(mylist)
。我通常应该尽量避免在这种情况下使用set?此外,找到min
和max
会比创建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
为什么不试一下吗? – 2013-02-27 00:30:59
@JoelCornett完成:) – askewchan 2013-02-27 00:33:10
您是否期望这种速度差异在您编写的任何程序中都很重要?使用genexp保持事物,使用genexp而不是构建一个百万个元素的'list'来迭代(如果这是Py2,则使用'xrange'而不是'range'),试图在C中做紧密循环的Python(例如'idlist = range(...)'而不是执行相同操作的'for'循环)等都会产生更大的差异。 – abarnert 2013-02-27 01:56:43