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

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • New Scientist

    New Scientis

    27 Kasım 2006