SORU
15 Ocak 2012, Pazar


Eğer 2 listeler aynı elemanları, sırası ne olursa olsun olup olmadığını belirlemek?

Basit bir soru için özür dilerim, ama zor bir zaman cevap bulmakta zorlanıyorum.

2 listeler benzetiyorum, "farklı sırayla aynı içeriği var, ama. eşit olup olmadığını bilmek istiyorum

Ex:

x = ['a', 'b']
y = ['b', 'a']

x == y True değerlendirmek istiyorum.

CEVAP
15 Ocak 2012, Pazar


Sadece x ve y elemanları ile multisets eşit olup olmadığını kontrol edebilirsiniz:

import collections
collections.Counter(x) == collections.Counter(y)

Bu unsurları hashable olmasını gerektirir; çalışma zamanı n listeler boyutunu olduğu O(n), olacaktır.

Eğer elementler aynı zamanda benzersiz de ayarlar (aynı asimptotik çalışma zamanı, biraz uygulamada daha hızlı olabilir) dönüştürebilirsiniz:

set(x) == set(y)

Eğer öğeleri hashable, ama sıralanabilir, başka bir alternatif (O(n log n) çalışma zamanı)

sorted(x) == sorted(y)

Eğer unsurları ne hashable ne de sıralanabilir ise aşağıdaki yardımcı işlevi kullanabilirsiniz. Oldukça yavaş (O(n²)) olacak ve genellikle unutmayındeğilunhashable ve sıralanamayan elemanları ezoterik davanın dışında kullanılamaz.

def equal_ignore_order(a, b):
    """ Use only when elements are neither hashable nor sortable! """
    unmatched = list(b)
    for element in a:
        try:
            unmatched.remove(element)
        except ValueError:
            return False
    return not unmatched

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joshua Kywn

    Joshua Kywn

    17 Mayıs 2010
  • Rootjunky.com

    Rootjunky.co

    22 EKİM 2011
  • The Platform

    The Platform

    14 HAZİRAN 2006