Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?

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)

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?

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

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
.

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

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
. Dengan kata lain,
[1, [7], [2], [8374163], [84302738]]
[1, [7], [1], [2314567], [0]]
4 menghasilkan
[1, [7], [2], [8374163], [84302738]]
[1, [7], [1], [2314567], [0]]
5. Mengapa tidak memanfaatkan properti ini secara berulang?

all_devices = []
for i in len(ethernet_devices):
  all_devices.append(ethernet_devices[i] + usb_devices[i])

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

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]
_

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)]
_

Atau, bukan? . Meskipun berhasil menjumlahkan bilangan bulat dalam iterable, ia mogok saat mencoba menggabungkan dua subdaftar dengan kesalahan berikut.

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
, we’ll notice that this solution doesn’t actually work for our situation. While it does a great job summing integers in an iterable, it crashes when trying to merge two sublists with the following error:

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]
  File "<pyshell#3>", line 1, in <listcomp>
    all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]
TypeError: unsupported operand type(s) for +: 'int' and 'list'
_

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]]
_0

Di 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]]
_1

Dalam 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]]
_2

Biasanya, solusi Anda harus dapat menggabungkan sejumlah daftar—tidak hanya 3. Saat Anda siap, bagikan solusi Anda di Twitter menggunakan tagar #RenegadePython

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
. Jika saya melihatnya, saya akan membagikannya.

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

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
. Inilah solusi saya yang menggunakan serangkaian pemahaman daftar. foto. Indonesia. com/Xhf4GETi4i
Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?

— Jeremy Grifski (@RenegadeCoder94) 19 April 2020
Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?

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]]
_3

Seperti 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

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
—atau setidaknya kunjungi milis kami, sehingga Anda tidak akan melewatkan artikel lainnya. Saksikan lain kali untuk mempelajari cara memeriksa apakah ada file dengan Python.

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 Seri

Seri 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

Bagaimana Anda menjumlahkan dua elemen dalam daftar dengan python?
,

Jika Anda memiliki masalah sendiri, jangan ragu untuk bertanya. Orang lain mungkin memiliki masalah yang sama. Nikmati Cara Python

Bagaimana Anda menjumlahkan elemen dalam daftar dengan Python?

Python menyediakan fungsi bawaan sum() yang merangkum angka dalam daftar. Sintaksis. sum(iterable, start) iterable. iterable bisa berupa apa saja list , tuples atau dictionary , tetapi yang paling penting harus berupa angka. Mulailah. awal ini ditambahkan ke jumlah angka di iterable.

Bisakah Anda menggunakan += dengan daftar Python?

daftar. extend(list2) menambahkan elemen di list2 ke akhir daftar. Menggunakan + atau += pada daftar mirip dengan menggunakan extend() . daftar. index(elem) -- mencari elemen yang diberikan dari awal daftar dan mengembalikan indeksnya.