SORU
8 Mart 2012, PERŞEMBE


Eğer iki sırasız listeler eşit olup olmadığını kontrol edin

(Ve hızlı) kolay bir yol için iki belirlemek için arıyorumsıralanmamışlisteler aynı unsurları içerir:

Örneğin:

['one', 'two', 'three'] == ['one', 'two', 'three'] :  true
['one', 'two', 'three'] == ['one', 'three', 'two'] :  true
['one', 'two', 'three'] == ['one', 'two', 'three', 'three'] :  false
['one', 'two', 'three'] == ['one', 'two', 'three', 'four'] :  false
['one', 'two', 'three'] == ['one', 'two', 'four'] :  false
['one', 'two', 'three'] == ['one'] :  false

Bir harita kullanarak olmadan bunu yapmak için umuyorum.

CEVAP
8 Mart 2012, PERŞEMBE


Python yerleşik (hashable) işleri, set adlı sıralanmamış bir koleksiyon türü vardır. Eğer ayarlar her iki listeyi de dönüştürürseniz, karşılaştırma sırasız olacak.

set(x) == set(y)

Documentation on set


EDİT: @mdwhatcott çiftleri kontrol etmek için, istediğiniz işaret ediyor. set bu yoksayar, ayrıca her bir listedeki öğelerin sayısını izler benzer bir veri yapısı. Bu multiset; standart kütüphane collections.Counter alanında en iyi yaklaşım denir:

>>> import collections
>>> compare = lambda x, y: collections.Counter(x) == collections.Counter(y)
>>> 
>>> compare([1,2,3], [1,2,3,3])
False
>>> compare([1,2,3], [1,2,3])
True
>>> compare([1,2,3,3], [1,2,2,3])
False
>>> 

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • MVLV28

    MVLV28

    17 Mart 2008
  • Ty Moss

    Ty Moss

    20 Kasım 2007