, bu ... burun farkıyla neredeyse bir yıkama, ancak yineleme kazanır var: bütün cevaplar daha eski sözdizimi iter(x).next()
değil, kullandığınız niçin emin
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
Değil Bana göre tercih edilen yeni bir next(iter(x))
(ve aynı zamanda Python 3.1'de çalışır).
Ancak, her iki üzerinde açma kazanır eller aşağı:
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
Bu tabii diğerleri de belirtildiği gibi, başarısız avantajına sahiptir, (tek maddelik setleri için nereye ikinci şeklidir hızlı eğer seti "biliyordum" aslında sadece bir öğe vardı birkaç tane vardı). keyfi N> 1 öğelerle setleri için, tuple iter değil, yavaşlar: tekil vaka için açma, Yani
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=next(iter(x))'
1000000 loops, best of 3: 0.417 usec per loop
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=tuple(x)[0]'
100000 loops, best of 3: 3.12 usec per loop
ve genel durum için next(iter(x))
, iyi görünüyor.
Çok güzel! Eğer eleman sayısı 1 değilse, bu başarısız olur. –
@Laurence: Bu iyi bir gözlem. Hataları erken yakala, doğru mu? – u0b34a0f6ae
Ya da Python'un iş için uygun bir işleve sahip olduğunu iddia etmek istiyorsanız (iş arkadaşlarınız senden nefret edecekler): 'element, = myset' – rdb