SORU
26 Ocak 2009, PAZARTESİ


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.

İlgili soru: In Python, what is the fastest algorithm for removing duplicates from a list so that all elements are unique while preserving order?

CEVAP
26 Ocak 2009, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Marina and The Diamonds

    Marina and T

    8 Temmuz 2008
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009