<p>如果我有一个python列表,它有许多重复项,并且我想遍历每个项,但不遍历重复项,那么最好使用一个集合(如<code>set(mylist)</code>),还是找到另一种方法来创建一个没有重复项的列表?我只是想在列表中循环并检查重复项,但我想这就是初始化时<code>set()</code>所做的。</p>
<p>所以,如果<code>mylist = [3,1,5,2,4,4,1,4,2,5,1,3]</code>和我真的只想循环<code>[1,2,3,4,5]</code>(顺序无关紧要),我应该使用<code>set(mylist)</code>或其他东西吗?</p>
<p>在上一个示例中,有一个替代方法是可能的,因为列表包含介于其最小值和最大值之间的每个整数,所以我可以循环<code>range(min(mylist),max(mylist))</code>或<code>set(mylist)</code>。在这种情况下,我应该尽量避免使用set吗?另外,找到<code>min</code>和<code>max</code>比创建<code>set</code>慢吗?</p>
<hr/>
<p>在上一个例子中,<code>set</code>更快:</p>
<pre><code>from numpy.random import random_integers
ids = random_integers(1e3,size=1e6)
def set_loop(mylist):
idlist = []
for id in set(mylist):
idlist.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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
</code></pre>