SORU
19 EKİM 2011, ÇARŞAMBA


Nasıl verimli bir şekilde Python iki sırasız listeler (ayarlar) karşılaştırmak için?

a = [1, 2, 3, 1, 2, 3]
b = [3, 2, 1, 3, 2, 1]

a ve b tam olarak aynı unsurları, sadece farklı oldukları için eşit olarak kabul edilebilir.

Şey, benim gerçek listeler nesneleri (benim sınıf örneği), tamsayı değil oluşacaktır.

CEVAP
19 EKİM 2011, ÇARŞAMBA


O(n):() Karşıen iyi yöntem ise nesneleri hashable ():

def compare(s, t):
    return Counter(s) == Counter(t)

O(n log n):() sıralanmışyöntem eğer nesneleri hiç değilse) bir sonraki en iyi

def compare(s, t):
    return sorted(s) == sorted(t)

O(n * n): Eğer nesneleri ne hashable, ne de hiç, eşitlik kullanabilirsiniz:

def compare(s, t):
    t = list(t)   # make a mutable copy
    try:
        for elem in s:
            t.remove(elem)
    except ValueError:
        return False
    return not t

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • Wild Academy

    Wild Academy

    8 Aralık 2009