Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Membandingkan Senarai Objek Tidak Boleh Hash yang Tidak Teratur dengan Cekap?

Bagaimana untuk Membandingkan Senarai Objek Tidak Boleh Hash yang Tidak Teratur dengan Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 02:38:021060semak imbas

How to Efficiently Compare Unordered Lists of Non-Hashable Objects?

Membandingkan Senarai Tidak Tertib Objek Tidak Boleh Cincang dengan Cekap

Senarai tidak tersusun (bukan set) menimbulkan cabaran apabila membandingkannya untuk kesamarataan, kerana mereka elemen boleh dalam sebarang susunan. Kesukaran ini menjadi lebih ketara apabila berurusan dengan objek tidak boleh cincang, seperti contoh kelas yang ditentukan pengguna.

Untuk memudahkan perbandingan sedemikian, pelbagai pendekatan wujud dengan kerumitan masa yang berbeza-beza:

O(n)

Untuk objek boleh cincang, Kaunter menyediakan penyelesaian yang optimum:

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

O(n log n)

Jika objek boleh dipesan, diisih menawarkan alternatif yang sesuai:

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

O(n * n)

Apabila kebolehtetapan atau kebolehaturan tidak tersedia, pendekatan mudah menggunakan kesaksamaan boleh digunakan:

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

Dengan memilih penyelesaian yang sesuai berdasarkan sifat objek anda, anda boleh membandingkan senarai tidak tersusun dengan cekap, walaupun apabila elemen tidak boleh dicincang atau boleh dipesan.

Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Senarai Objek Tidak Boleh Hash yang Tidak Teratur dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn