Misalkan saya memiliki daftar A=[2,32,41,2,4,73,5,9,20]. Jika saya ingin membuat daftar B yang elemennya adalah jumlah elemen tetangga di A, nilai batas 2 dan 20 dikecualikan, berikut kode yang saya miliki:

A=[2,32,41,2,4,73,5,9,20]
B = []
for i in range (1,len(A)-1):
    B.append(A[i-1]+A[i+1])
>>> B
>>> [43, 34, 45, 75, 9, 82, 25]

Saya hanya ingin tahu apakah ada cara yang lebih baik untuk membuat daftar B? Pola ini adalah apa yang biasanya saya andalkan saat mengkode dengan beberapa masalah seperti itu, tetapi saya benar-benar ingin tahu apakah ada cara yang lebih baik/lebih mudah untuk menggunakan elemen dalam daftar/array dengan titik batas yang dikecualikan. (alih-alih menggunakan range, seperti yang saya lakukan di sini)

Terima kasih banyak atas bantuan dan sarannya!

1
ZR- 12 Mei 2021, 08:17

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan zip:

In [109]: A
Out[109]: [2, 32, 41, 2, 4, 73, 5, 9, 20]

In [110]: [a + b for a,b in zip(A, A[2:])]
Out[110]: [43, 34, 45, 75, 9, 82, 25]

Performa yang sedikit lebih baik menggunakan zip dan daftar comp. Menggunakan %timeit untuk mengukur, ops versinya adalah b versi saya adalah a:

In [114]: %timeit  a(A)
1.06 µs ± 7.63 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [115]: %timeit  b(A)
1.63 µs ± 9.72 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
1
salparadise 12 Mei 2021, 06:20

Ini adalah salah satu cara untuk menggunakan dengan pemahaman daftar:

a = [2, 32, 41, 2, 4, 73, 5, 9, 20]
b = [i + j for (i,j) in zip(a[:-2], a[2:])]
b
[43, 34, 45, 75, 9, 82, 25]
1
Jamie Deith 12 Mei 2021, 05:46