Nasıl Python ederken bir listesi düzenini korumak yinelenen kaldırmak için?
-Yerleşik Python listeden çiftleri kaldırır, buna rağmen koruma emri var mı? Çiftleri kaldırmak için bir dizi kullanabilirsiniz biliyorum, ama bu orijinal düzeni bozar. Ben böyle kendi kendime idare ediyorum o da biliyor:
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
(unwind sayesinde*.* 10)
Ama mümkünse bir yerleşik veya daha Pythonic bir deyim kendimi boşuna isterim.
CEVAP
Bazı alternatifler var burada: http://www.peterbe.com/plog/uniqifiers-benchmark
Hızlı bir:
def f7(seq):
seen = set()
seen_add = seen.add
return [ x for x in seq if not (x in seen or seen_add(x))]
Neden seen.add
5 ** yerine sadece seen.add
arama atamak? Gözlerine bir ve seen.add
her yineleme çözme yerel bir değişken çözmek daha pahalıya mal oluyor. seen.add
yineleme arasında değişmiş ve çalışma zamanı ekarte etmek için yeterince akıllı değil. Güvenli oynamak için, nesnenin her zaman kontrol edin.
Eğer bu fonksiyon aynı veri kümesi üzerinde bir sürü kullanmayı planlıyorsanız, sıralı bir dizi ile daha iyi olurdu belki de: http://code.activestate.com/recipes/528878/
Ç(1) ekleme ve işlem başına kontrol üye silme.
Nasıl klon ya da Python içinde bir lis...
Nasıl Python dizin tarafından bir list...
Nasıl Python listesi tüm permütasyon o...
Nasıl PHP çok boyutlu bir dizi yinelen...
Nasıl dize Java kullanarak boşluk yine...