多くの重複があるpythonリストを持っていて、各アイテムを繰り返し処理したいが、重複を経由しない場合は、(set(mylist)
のように)セットを使用するのが最善か、だから、重複?私はリストをループして、重複をチェックすることを考えていましたが、私はそれはそれが初期化されますときset()
が何をするかだ考え出し。セットやリストをループスルーする方が良い/もっと速い?
mylist = [3,1,5,2,4,4,1,4,2,5,1,3]
場合、私は実際には(順番は関係ありません)[1,2,3,4,5]
をループにしたいです、 set(mylist)
などを使用する必要がありますか?
最後の例では、minとmの間のすべての整数がリストに含まれています私はrange(min(mylist),max(mylist))
またはset(mylist)
を通してループすることができます。私は一般的にこの場合にsetを使わないようにするべきですか?またset
を作成するよりも、min
とmax
の方が遅いでしょうか?最後の例の場合
、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
なぜそれをテストしないと保証されているの? –
@JoelCornett done :) – askewchan
これまでに書いたプログラムでこの速度差が実際に問題になると思いますか? 'numpy'で物事を守り、反復するために百万要素の' list'を構築するのではなくgenexpを使います(Py2の場合は 'range'の代わりに' xrange'を使います)。代わりにCでタイトなループをしようとします(例えば、同じことをする 'for'ループの代わりに' idlist = range(...) 'など)などはすべて、より大きな違いをもたらすでしょう。 – abarnert