Selamat datang kembali di edisi lain dari seri How to Python. Kali ini saya ingin menjumlahkan elemen dari dua list dengan Python. Saya mendapat inspirasi untuk topik ini ketika mencoba melakukan hal ini di tempat kerja beberapa hari yang lalu
Singkatnya, salah satu cara terbaik untuk menjumlahkan elemen dari dua daftar di Python adalah dengan menggunakan pemahaman daftar bersama dengan operator penjumlahan. Misalnya, kita dapat melakukan penjumlahan berdasarkan elemen dari dua daftar sebagai berikut. `[x + y untuk x, y dalam zip(list_a, list_b)]`python. Tapi, seperti biasa, kami akan melihat opsi lain
Daftar isi
Ringkasan Video
https. //Youtube. be/-ueWDzP88eQVideo tidak dapat dimuat karena JavaScript dinonaktifkan. 3 Cara untuk Menjumlahkan Dua Daftar Elemen dengan Bijaksana dengan Python (https. //Youtube. be/-ueWDzP88eQ)
Setelah satu setengah tahun, akhirnya saya sempat membuat ringkasan video untuk artikel ini. Jika Anda menyukai hal semacam itu, lihatlah. Tentu saja, membaca artikel biasanya lebih cepat, tetapi Anda dapat membuka YouTube dan memberikan suka
Pengantar Masalah
Baru-baru ini, saya mengalami masalah di mana perpustakaan tidak berfungsi persis seperti yang saya inginkan, jadi saya harus meretas hasilnya untuk membuat hidup saya sedikit lebih mudah.
Dalam skenario ini, saya memiliki pustaka koneksi yang saya gunakan untuk membuat daftar semua perangkat yang tersedia. Namun, fungsi daftar dihubung pendek untuk jenis koneksi tertentu, sehingga tidak pernah benar-benar mencantumkan semuanya. Akibatnya, saya terpaksa menjalankan fungsi tersebut dua kali. sekali untuk USB dan sekali lagi untuk Ethernet
Hasil dari fungsi daftar ini mengembalikan daftar yang tampak seperti berikut ini
# [size, [types], [interfaces], [serial numbers], [IP addresses]] [2, [7, 7], [1, 2], [2314567, 8374163], [0, 84302738]]Namun, saya terjebak mengambil daftar secara terpisah
[1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_Secara alami, saya ingin dapat menggabungkan kedua daftar kembali ke apa yang saya harapkan pada awalnya. Namun, saya tidak sepenuhnya yakin bagaimana saya akan melakukannya. Jadi, mari kita lihat beberapa solusi yang mungkin
Solusi
Saat menggabungkan dua daftar, ada beberapa cara yang memungkinkan untuk melakukannya
- Gabungkan kedua daftar secara manual menggunakan operator penjumlahan
- Jumlahkan elemen dari kedua daftar menggunakan pemahaman daftar
- Jumlahkan elemen dari kedua daftar menggunakan fungsi peta
Jangan ragu untuk langsung menuju ke solusi untuk Anda atau menelusuri selama yang Anda butuhkan
Menggabungkan Dua Daftar dengan Tangan
Pada awalnya, kami mungkin mencoba menggabungkan kedua daftar dengan tangan. Dengan kata lain, kita dapat mencoba yang berikut ini
ethernet_devices = [1, [7], [2], [8374163], [84302738]] usb_devices = [1, [7], [1], [2314567], [0]] all_devices = [ ethernet_devices[0] + usb_devices[0], ethernet_devices[1] + usb_devices[1], ethernet_devices[2] + usb_devices[2], ethernet_devices[3] + usb_devices[3], ethernet_devices[4] + usb_devices[4] ]Sekarang, solusi itu hampir tidak elegan, tetapi menyelesaikan pekerjaan. Lagi pula, kami memanfaatkan fakta bahwa daftar dapat digabungkan menggunakan operator yang sama dengan penambahan
Seperti yang Anda lihat, kita dapat menjumlahkan setiap pasangan elemen menggunakan sebuah loop. Tentu saja, jika kita dapat membuat daftar menggunakan perulangan, kita mungkin dapat menggunakan pemahaman daftar
Jumlahkan Elemen dari Dua Daftar dengan Pemahaman
Sama seperti pelajaran terakhir tentang pembalik kamus dengan Python, kita dapat memanfaatkan pemahaman untuk menyederhanakan masalah ini secara dramatis. Mari lihat
Sekarang kita sedang berbicara. Itu lima baris pemetaan membosankan yang dikompresi menjadi pemahaman daftar sederhana. Jika ini pertama kalinya Anda melihat pemahaman daftar, saya sarankan untuk membaca artikel saya tentang cara menulis pemahaman daftar
Yang mengatakan, untuk meringkas, pemahaman bekerja dengan mengulang pasangan tupel yang dihasilkan oleh [1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]6. Untuk setiap komponen (x dan y) dalam tupel, kita jumlahkan dan tambahkan ke daftar yang baru dibuat. Betapa kerennya itu?. Tapi tunggu, itu menjadi lebih baik
all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]_Yang mengatakan, Anda mungkin merasa berguna untuk menggabungkan dua daftar bilangan bulat yang ketat
Jumlahkan Elemen dari Dua Daftar dengan Pemetaan
Pada titik ini, pada dasarnya kami telah menjawab pertanyaan kami. Namun, ada solusi lain yang membutuhkan lebih sedikit kode. Saksikan berikut ini
ethernet_devices = [1, [7], [2], [8374163], [84302738]] usb_devices = [1, [7], [1], [2314567], [0]] import operator all_devices = list(map(operator.add, ethernet_devices, usb_devices))Tentu saja, kita juga perlu menambahkan ketergantungan yang membuat solusi ini sedikit kurang menarik. Faktanya, jika kita akan menempuh jalan itu, kita dapat dengan mudah memanfaatkan [1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]7
ethernet_devices = [1, [7], [2], [8374163], [84302738]] usb_devices = [1, [7], [1], [2314567], [0]] import numpy as np all_devices = np.add(ethernet_devices, usb_devices)Namun, [1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_7 adalah perpustakaan yang sangat besar, jadi kita mungkin harus tetap berpegang pada pemahaman daftar kita
Pertunjukan
Seperti biasa, saya suka melihat kinerja secara singkat karena itu mungkin atau mungkin tidak memengaruhi keputusan Anda. Untuk melakukan itu, kita harus menyiapkan solusi kita di beberapa string
import timeit setup = """ import operator ethernet_devices = [1, [7], [2], [8374163], [84302738]] usb_devices = [1, [7], [1], [2314567], [0]] """ brute_force = """ all_devices = [ ethernet_devices[0] + usb_devices[0], ethernet_devices[1] + usb_devices[1], ethernet_devices[2] + usb_devices[2], ethernet_devices[3] + usb_devices[3], ethernet_devices[4] + usb_devices[4] ] """ comprehension = """ all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)] """ maps = """ all_devices = list(map(operator.add, ethernet_devices, usb_devices)) """Sayangnya, saya tidak dapat melakukan tes [1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_7 karena saya tidak memiliki paketnya. Jangan ragu untuk membagikan metrik Anda sendiri di komentar
Bagaimanapun, yang perlu kita lakukan sekarang adalah menjalankan perintah ethernet_devices = [1, [7], [2], [8374163], [84302738]] usb_devices = [1, [7], [1], [2314567], [0]] all_devices = [ ethernet_devices[0] + usb_devices[0], ethernet_devices[1] + usb_devices[1], ethernet_devices[2] + usb_devices[2], ethernet_devices[3] + usb_devices[3], ethernet_devices[4] + usb_devices[4] ]0 sebagai berikut
[1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_0Di sini, kami telah memilih untuk mengulang pengujian sepuluh kali sebelum memilih waktu eksekusi batas bawah. Ternyata, metode brute force adalah pilihan tercepat. Jelas, itu tidak ideal — atau bahkan dapat diskalakan — tetapi cepat
Sebagai referensi, semua tes diselesaikan pada Windows 10 dengan Python 3. 7. 3
Tantangan
Sekarang setelah Anda tahu cara melakukan penjumlahan berdasarkan elemen dari dua daftar dengan Python, saya punya tantangan untuk Anda. Tulis beberapa kode Python yang dapat menjumlahkan sejumlah daftar dengan asumsi panjangnya sama. Sebagai contoh
[1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_1Dalam contoh ini, kami menggabungkan tiga daftar, bukan dua. Akibatnya, output yang diharapkan harus sebagai berikut
[1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_2Biasanya, solusi Anda harus dapat menggabungkan sejumlah daftar—tidak hanya 3. Saat Anda siap, bagikan solusi Anda di Twitter menggunakan tagar #RenegadePython
Sementara itu, inilah celah saya pada masalah yang menggunakan serangkaian pemahaman daftar
Dalam artikel Cara Menjumlahkan Elemen dari Dua Daftar, saya meminta Anda menemukan cara menjumlahkan elemen dari beberapa daftar sebagai tantangan #RenegadePython
. Inilah solusi saya yang menggunakan serangkaian pemahaman daftar. foto. Indonesia. com/Xhf4GETi4i— Jeremy Grifski (@RenegadeCoder94) 19 April 2020
Apakah ada cara yang lebih baik untuk membuat ini berfungsi?
Sedikit Rekap
Dengan menggunakan beberapa metode di atas, kita seharusnya dapat menjumlahkan elemen dari dua daftar
[1, [7], [2], [8374163], [84302738]] [1, [7], [1], [2314567], [0]]_3Seperti yang bisa kita lihat, ada banyak cara untuk menjalankan penjumlahan elemen dari dua daftar. Ambil pilihanmu
Seperti biasa, terima kasih sudah mampir. Jika Anda menyukai artikel ini, saya memiliki daftar besar potongan kode seperti ini untuk Anda teliti
Jika Anda tertarik untuk mempelajari lebih lanjut tentang Python, pertimbangkan untuk berlangganan The Renegade Coder
Saat Anda di sini, Anda mungkin tertarik dengan beberapa artikel Python lainnya
- Cara Mengotomatiskan GitHub Wiki Anda
- Bagaimana Saya Mengotomatiskan Tanggung Jawab Penilaian Saya
- Balikkan String dengan Python
Sekali lagi terima kasih sudah mampir. Saya menghargainya
Cara Python (42 Artikel)—Navigasi SeriSeri tutorial How to Python menyimpang dari artikel pengkodean mendalam yang biasa dengan menjelajahi masalah berukuran byte di Python. Dalam seri ini, siswa akan mendalami topik unik seperti Cara Membalikkan Kamus, Cara Menjumlahkan Elemen dari Dua Daftar, dan Cara Memeriksa apakah File Ada
Setiap masalah dieksplorasi dari pendekatan naif hingga solusi ideal. Kadang-kadang, akan ada beberapa solusi hanya untuk bersenang-senang juga. Di akhir setiap artikel, Anda akan menemukan rekap penuh cuplikan kode untuk Anda gunakan sendiri. Jangan takut untuk mengambil apa yang Anda butuhkan
Jika Anda tidak yakin harus mulai dari mana, saya sarankan untuk memeriksa daftar Cuplikan Kode Python kami untuk Masalah Sehari-hari. Selain itu, Anda dapat menemukan beberapa cuplikan dalam format notebook Jupyter di GitHub
Jika Anda memiliki masalah sendiri, jangan ragu untuk bertanya. Orang lain mungkin memiliki masalah yang sama. Nikmati Cara Python