Cara terbaik untuk melakukan ini adalah dengan menyortir daftar dan membandingkannya. (Menggunakan Counter
tidak akan bekerja dengan objek yang tidak hash.) Ini mudah untuk integer:
sorted(a) == sorted(b)
Itu menjadi sedikit rumit dengan benda-benda sewenang-wenang. Jika Anda peduli tentang identitas objek, yaitu apakah objek yang sama ada di kedua daftar, Anda dapat menggunakan id()
fungsi sebagai kunci pengurutan.
sorted(a, key=id) == sorted(b, key==id)
(Dalam Python 2.x Anda sebenarnya tidak memerlukannya key=
parameter, karena Anda dapat membandingkan objek apa pun dengan objek apa pun. Urutannya arbitrer tetapi stabil, sehingga berfungsi dengan baik untuk tujuan ini; tidak masalah apa pun urutan objeknya di, hanya bahwa urutannya sama untuk kedua daftar. Dalam Python 3, meskipun, membandingkan objek dari berbagai jenis tidak diizinkan dalam banyak keadaan - misalnya, Anda tidak dapat membandingkan string dengan bilangan bulat - jadi jika Anda akan memiliki objek dari berbagai jenis, terbaik untuk secara eksplisit menggunakan ID objek.)
Jika Anda ingin membandingkan objek dalam daftar dengan nilai, di sisi lain, pertama-tama Anda perlu mendefinisikan apa arti "nilai" untuk objek. Maka Anda akan memerlukan beberapa cara untuk menyediakannya sebagai kunci (dan untuk Python 3, sebagai jenis yang konsisten). Salah satu cara potensial yang akan bekerja untuk banyak objek sewenang-wenang adalah mengurutkannya repr()
. Tentu saja, ini bisa membuang banyak waktu ekstra dan repr()
string pembangun memori untuk daftar besar dan sebagainya.
sorted(a, key=repr) == sorted(b, key==repr)
Jika objek adalah semua tipe Anda sendiri, Anda bisa mendefinisikannya __lt__()
agar objek tahu bagaimana membandingkan dirinya dengan orang lain. Maka Anda bisa menyortirnya dan tidak khawatir tentang key=
parameternya. Tentu saja Anda juga bisa mendefinisikan __hash__()
dan menggunakan Counter
, yang akan lebih cepat.