Dalam bahasa pemrograman Python, daftar didefinisikan sebagai wadah yang dipesan dan dapat dimodifikasi. Daftar dapat digunakan untuk menyimpan objek yang sifatnya serupa. Saat menulis dengan Python, perbandingan sering digunakan untuk memeriksa berbagai kondisi. Untuk pemeriksaan kondisi tunggal, kita mungkin perlu membandingkan dua variabel atau dua set variabel. Di blog ini, kita akan melihat berbagai metode untuk membandingkan dua daftar dengan Python. Saat membandingkan, kita harus menentukan apakah kedua daftar menyertakan komponen yang sama atau tidak, terlepas dari urutan kemunculan elemen dalam daftar
Ruang Lingkup Pasal
- Pada artikel ini, kami akan mempelajari seluk-beluk perbandingan daftar python dengan memandu Anda langkah demi langkah melalui dasar-dasar konsep perantara
- Kita akan mulai dengan peran daftar Python dan memperluasnya ke berbagai cara agar kita dapat membandingkan dua daftar dengan Python
- Kita akan melalui operator ==, menyortir di samping operator ==, untuk loop, menggunakan fungsi zip() dan menggunakan koleksi. Counter() function, menggunakan fungsi reduce() bersamaan dengan map() dan function difference();
pengantar
Sebelum kita mulai, kami akan menganggap bahwa Anda telah berhasil menginstal Python di sistem Anda dan terbiasa dengan Dasar-Dasar Python
Mari kita mundur selangkah dan melihat Struktur Data Daftar, yang diperlukan untuk memahami perbandingan daftar python. Jika Anda sudah mengetahuinya, lanjutkan ke bagian "Bagaimana cara membandingkan dua daftar dengan Python?"
Apa Itu Daftar Python Sebenarnya?
Ada beberapa struktur data di Python, tetapi Daftar adalah salah satu yang paling mendasar dan signifikan. Seiring dengan urutan linier, Daftar bertindak mirip dengan larik dinamis dan memiliki beberapa metode bawaan untuk melakukan berbagai tindakan pada data yang disimpan di dalamnya. Pengindeksan Daftar dimulai dari nol dan berlanjut hingga (panjang Daftar - 1). Daftar mendukung beberapa operasi seperti menambahkan, mengalikan, mengiris, keanggotaan, dan membandingkan. Daftar digunakan dalam Python untuk menampung serangkaian tipe data yang berbeda. Daftar Python dapat berubah, yang berarti mereka dapat mengubah itemnya setelah dibuat. Daftar adalah salah satu dari empat struktur data Python untuk menyimpan kumpulan data;
Daftar dengan Python, seperti yang Anda ketahui, dapat berubah dan dapat menyimpan jumlah entri yang terbatas. Berdasarkan kriteria luas, kami tidak dapat menentukan apakah sebuah daftar lebih atau kurang dari daftar lainnya. Ketika kami berbicara tentang membandingkan daftar, kami menyiratkan menentukan apakah dua daftar berisi entri yang sama atau tidak
Bagaimana Membandingkan Dua Daftar dengan Python?
Salah satu operasi paling mendasar dalam setiap bahasa pemrograman adalah perbandingan. Namun, bahkan tindakan yang tampaknya mendasar pun dapat memicu banyak perdebatan yang menarik
Dalam kebanyakan kasus, selama proses pengembangan, kita perlu membandingkan elemen data dalam sebuah daftar. Perbandingan adalah pendekatan untuk membandingkan elemen data dari satu daftar dengan elemen data dari daftar lainnya
Ternyata membandingkan dua daftar dengan Python cukup membuat stres, tetapi jangan khawatir, saya siap membantu Anda. Di blog ini, kami akan mengeksplorasi berbagai pendekatan untuk membandingkan dua daftar
Metode 1. Perbandingan Sederhana
Operator l1 == l2 untuk perbandingan elemen-bijaksana adalah pendekatan yang paling Pythonic untuk memverifikasi jika dua daftar yang dipesan l1 dan l2 identik. Hasil pengembaliannya adalah True jika semua entri sama dan panjang daftarnya sama. Pendekatan perbandingan ini bekerja dengan baik untuk skenario sederhana, tetapi tidak bekerja untuk perbandingan yang canggih, seperti yang akan kita lihat nanti
Daftar objek integer atau string adalah contoh kasus dasar
Kode
numbers = [1, 2, 3] target = [1, 2, 3] print(numbers == target)
Keluaran
Cukup mudah, ya?
Pengecualian. Sayangnya, dunia, seperti kode kualitas produksi, rumit. Segalanya menjadi sulit dengan cepat di dunia nyata. Pertimbangkan skenario berikut sebagai contoh
Asumsikan Anda memiliki daftar floating point yang dibuat secara dinamis. Anda dapat menggabungkan elemen tunggal atau bilangan floating point yang diperoleh dari operasi matematika seperti 0. 1 + 0. 2 + 0. 1
Kode
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _
Keluaran
False [0.40000000000000004, 0.2] [0.4, 0.2]
Jelas, matematika floating point memiliki batas, dan ada kalanya kita ingin membandingkan dua daftar sambil mengabaikan masalah presisi atau bahkan menentukan ambang batas. Operator == tidak akan cukup dalam skenario ini
Menggunakan == bukanlah jawaban dalam setiap keadaan; . Operator kesetaraan == membandingkan elemen daftar dengan elemen
Metode 2. Penyortiran Pertama dan Kemudian Menggunakan == Operator
Di Python, Anda bisa mengurutkan daftar dalam dua metode. Yang pertama adalah menggunakan daftar. sort() , dan lainnya kita dapat menggunakan fungsi sortir()
Pendekatan pertama mengurutkan daftar pada tempatnya, yang menyiratkan bahwa daftar Anda akan diubah. Yang terbaik adalah tidak mengubah daftar yang sudah ada karena ini mungkin membawa kekurangan yang sulit ditemukan
Metode sortir() lebih disukai karena mengembalikan daftar baru sambil membiarkan yang asli tidak berubah
Dengan bantuan sebuah contoh, mari kita lihat cara kerjanya
Kode
numbers = [10, 30, 20] target = [10, 20, 30] print(numbers == target) print(sorted(numbers) == sorted(target)) print(sorted(numbers)) print(sorted(target))
Keluaran
False True [10, 20, 30] [10, 20, 30] _
Akibatnya, dengan mengurutkan daftar terlebih dahulu, kami memastikan bahwa mereka memiliki urutan yang sama dan dengan demikian dapat dibandingkan menggunakan operator ==
Metode 3. Menggunakan untuk Loop
Pendekatan berikut mungkin digunakan oleh pengembang yang masuk dari bahasa pemrograman lain atau oleh pemula yang tidak terbiasa dengan operator persamaan pada daftar
Kode
def method_3(l1, l2): for i in range(min(len(l1), len(l2))): if l1[i] != l2[i]: return False return len(l1) == len(l2) numbers = [10, 20, 20] target = [10, 20, 30] print(method_3(numbers, target))
Keluaran
Anda mengulang semua indeks dari 0 hingga (panjang daftar terkecil - 1) , seperti yang didefinisikan oleh komponen min(len(l1), len(l2). Kemudian Anda memeriksa apakah kedua komponen di tempat yang sama berbeda. Jika mereka berbeda, i. e. , l1[i]. = l2[i], Anda dapat langsung mengembalikan False karena daftarnya bervariasi
Daftar komponen sebanding jika Anda menjalankan seluruh loop tanpa mengembalikan False. Namun, satu daftar mungkin lebih panjang. Jadi, dengan mengembalikan len(l1) == len(l2), Anda menjamin bahwa Anda hanya mengembalikan True jika semua entri identik dan daftar memiliki panjang yang sama. Satu ton kode untuk melakukan sesuatu dengan sangat mudah. Mari kita lihat pendekatan yang lebih baik dengan memanfaatkan metode zip() untuk meminimalkan kerumitan kode
Metode 4. Menggunakan Fungsi zip() Bersamaan dengan for Loop
Fungsi zip menerima daftar iterables dan menggabungkan nilai ke-i mereka menjadi tuple untuk setiap i
Mari kita lihat bagaimana kita dapat memanfaatkan metode zip() untuk membuat kode sebelumnya menjadi lebih pendek
Kode
def method_4(l1, l2): for x, y in zip(l1, l2): if x != y: return False return len(l1) == len(l2) numbers = [1, 2, 3, 4, 5] target = [1, 2, 3] print(method_4(numbers, target)) _
Keluaran
Anda sekarang mengulangi pasangan item daripada indeks (yang di-zip bersama). Jika daftar memiliki panjang yang bervariasi, entri yang tersisa dari daftar yang lebih panjang akan dilewati. Ini menyederhanakan perbandingan berdasarkan elemen dan menghilangkan kebutuhan akan teknik pengindeksan yang rumit
Metode 5. cmp() Fungsi
Catatan. Fungsi cmp() tidak didukung di Python 3. x
Fungsi cmp() adalah mekanisme bawaan Python untuk membandingkan item dari dua daftar. Fungsi juga dapat membandingkan dua item dan mengembalikan hasil berdasarkan masukan yang diberikan. Nilai pengembalian ini bisa menjadi salah satu dari tiga hal. 1, 0 atau -1
Misalnya, jika l1 dan l2 adalah dua daftar, maka nilai 1 dikembalikan jika l1 (daftar 1) lebih besar dari l2 (atau daftar2). Jika l1 lebih kecil dari l2, nilai -1 dikembalikan; . Sekarang mari kita lihat sebuah contoh. Kode
list1 = [ 1, 2, 4, 3] list2 = [ 1, 2, 5, 8] list3 = [ 1, 2, 5, 8, 10] list4 = [ 1, 2, 4, 3] # Comparing lists print "Comparison of list2 with list1 : ", print cmp(list2, list1) print "Comparison of list2 with list3(larger size) : ", print cmp(list2, list3) print "Comparison of list4 with list1(equal) : ", print cmp(list4, list1)
Keluaran
Comparison of list2 with list1 : 1 Comparison of list2 with list3(larger size) : -1 Comparison of list4 with list1(equal) : 0 _
Metode 6. Menggunakan Fungsi peta() Bersama Dengan Fungsi pengurangan()
Metode map() mengambil sebagai input fungsi dan objek iterable Python (daftar, tupel, string, dll. ) dan menghasilkan objek peta. Fungsi berlaku untuk setiap elemen daftar dan mengembalikan sebuah iterator sebagai hasilnya
Sintaksis
map(funtion, iterable_object) _
Selain itu, python memiliki metode bernama reduce() yang memungkinkan kita untuk menyingkat daftar. Metode pengurangan () secara rekursif menerapkan fungsi yang ditentukan ke objek yang dapat diubah. Untuk menggunakan metode reduce(), pertama-tama kita harus mengimpor modul functool
Sintaksis
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _0
Untuk membandingkan dua daftar, kita dapat menggunakan kedua pendekatan tersebut secara bersamaan. Metode map() akan menerapkan fungsi ke setiap objek iterable, dan fungsi reduce() akan menanganinya secara rekursif. Perhatikan contoh berikut
Catatan. Sebelum menggunakan metode ini, Anda harus mengurutkan daftar
Kode
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _1
Keluaran
Catatan. Fungsi lambda adalah fungsi anonim kecil. Fungsi lambda dapat memiliki jumlah parameter yang tidak terbatas tetapi hanya satu ekspresi
Sintaksis
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _2
Fungsi map() dalam contoh di atas menggabungkan semua pasangan item ke nilai Boolean; . Metode pengurangan () melakukan operasi dan pada semua nilai Boolean
Metode 7. Menggunakan koleksi. Menangkal()
Sintaksis
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _3
Untuk membandingkan daftar secara efektif, gunakan koleksi. fungsi penghitung(). Kelas Python Counter disertakan dalam modul Collections. Ini adalah subkelas Kamus. Itu melacak item sebagai kunci kamus dan menghitungnya sebagai nilai kamus. Dengan menggunakan ini, kita dapat menghitung frekuensi setiap elemen dalam daftar dan menggunakan operator == untuk menentukan apakah dua daftar itu identik
Catatan. Pengurutan daftar tidak berpengaruh pada fungsi counter()
Sekarang mari kita lihat sebuah contoh. Kode
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _4
Keluaran
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _5
Metode 8. Menggunakan fungsi perbedaan()
Sintaksis
Kami juga menggunakan metode difference() untuk membandingkan daftar. Fungsi difference() memberikan perbedaan antara dua set sebagai satu set. Set yang dikembalikan mencakup hal-hal yang hanya ada di set pertama dan tidak di keduanya
Untuk memanfaatkan fungsi difference() , pertama-tama kita harus mengubah daftar kita menjadi set
Jadi, Apa Sebenarnya 'Set' itu?
Set adalah salah satu dari empat tipe data bawaan Python untuk menyimpan kumpulan data. Himpunan adalah koleksi yang tidak terurut, tidak berubah, dan tidak terindeks. Di Python, metode set() mengambil input dan mengubahnya menjadi objek set. Itu menerima parameter seperti daftar, tupel, dan kamus. Karena barang-barang yang disediakan sebagai daftar tidak berurutan, keluaran elemen mungkin tidak sesuai urutan. Dua elemen dengan nilai yang sama tidak dapat ada dalam satu set
Perhatikan contoh berikut
Kode
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _6
Keluaran
numbers = [] numbers.append(0.1 + 0.2 +0.1) numbers.append(0.2) target = [0.4, 0.2] print(numbers == target) print(numbers) print(target) _7
Dalam contoh di atas, pertama-tama kita menggunakan fungsi set() untuk mengubah daftar menjadi satu set, kemudian kita menggunakan fungsi difference() untuk membedakan antara kedua set ini, dan terakhir kita menggunakan kondisi if() untuk memeriksa nilai yang dikembalikan
Ini membawa kita ke akhir blog. Anda tampaknya telah menguasai beberapa teknik perbandingan daftar Python. Strategi optimal ditentukan pada jenis bidak yang kita miliki dan bagaimana kita ingin membandingkannya