2012-02-20 22 views

cevap

4

Tek umursayan şey en üstteki listedeki öğelerin sıralamasıdır ("derin" kelimesinin dışındakilerin tümü bana —'u önerirse, bunun ne anlama geldiğine dair aklıma şüphe getirir) Yinelenmeyeceğini bildiğinizden, set'u kullanabilirsiniz. vaka bu iki-dizilerini kadar basit ise

>>> larry = [(1,'a'), (2, 'b')] 
>>> moe = [(2, 'b'), (1, 'a')] 
>>> set(larry) == set(moe) 
True 

, ayrıca {1: 'a', 2: 'b'} olacağını dict, kullanabilirsiniz. Bu sizin için daha uygun bir yapı olabilir veya olmayabilir. dict(larry) == dict(moe)'un karşılaştırması, istediğini yapacak.

Kopyaları önemserseniz, listelerin kopyalarını alarak ve başarısız olana veya biri boş olana kadar öğeleri tek tek çekerek biraz daha fazla çalışacaktır.

+0

Kopyalama olasılığı yoktur. – canadadry

+0

Öyleyse bence istediğin bu mu? –

6

Seni anlarsam, komut dizileriniz kümeleri temsil eder ve listeleriniz kümeleri temsil eder. Yapmak için bariz şey setleri bunları dönüştürmek için geçerli:

def setterific(l): 
    return frozenset(frozenset(p) for p in l) 

setterific(larry) == setterific(moe) 

(setleri değişken olduğu için) bir python setleri kümelerine sahip olamaz, çünkü bu, frozensets kullanır; Bakınız How can I create a Set of Sets in Python?.

Yalnızca bir seviye kümeniz varsa, frozenset(larry) == frozenset(moe) ile gidin.

+0

Takımlar kümeleri temsil etmez. SMTP başlıklarına sipariş verilir. – canadadry

+0

@BonAmi: Sorunuz belirsizdir, bu yüzden diğer cevaplar benim sahip olduğum aynı senaryoyu ele aldılar. – Marcin

İlgili konular