Saya harus mencari melalui daftar dan mengganti semua kemunculan satu elemen dengan elemen lainnya. Sejauh ini upaya saya dalam mendapatkan kode saya tidak ada, apa cara terbaik untuk melakukan ini?
Sebagai contoh, misalkan daftar saya memiliki bilangan bulat berikut
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
dan saya harus mengganti semua kemunculan angka 1 dengan nilai 10 sehingga output yang saya butuhkan adalah
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Jadi tujuan saya adalah mengganti semua instance dari angka 1 dengan angka 10.
Jawaban:
sumber
Coba gunakan pemahaman daftar dan operator ternary .
sumber
a
kan? Saya pikir OP ingina
berubaha
harus bermutasi, tetapi (seperti yang ditunjukkan oleh Alekhya) itu sepele untuk menangani kedua kasus ketika menggunakan daftar pemahaman.a
maka Anda harus melakukannyaa[:] = [4 if x==1 else x for x in a]
(perhatikan daftar lengkap slice). Hanya melakukana =
kehendak akan membuat daftar barua
denganid()
(identitas) yang berbeda dari yang asliPemahaman daftar berfungsi dengan baik, dan mengulang dengan penghitungan dapat menghemat memori Anda (b / c operasi pada dasarnya dilakukan di tempat).
Ada juga pemrograman fungsional. Lihat penggunaan peta :
sumber
lambda
danmap
dianggap unpythonic.Jika Anda memiliki beberapa nilai untuk diganti, Anda juga dapat menggunakan kamus:
sumber
n
tidak ditemukandic
?n
tidak ditemukan. Saya harap kamu tidak keberatan.try/except
Solusi Anda tidak bagus.try-except
setidaknya 50% lebih cepat! Lihatlah jawabanif n in dic.keys()
adalah kinerja yang buruk. Gunakanif n in dic
ataudic.get(n,n)
(nilai default)sumber
Anda dapat menggunakan loop for dan atau while; namun jika Anda mengetahui fungsi Enumerate bawaan, maka disarankan untuk menggunakan Enumerate. 1
sumber
Untuk mengganti semua
1
dengan dengan mudah10
dalama = [1,2,3,4,5,1,2,3,4,5,1]
satu dapat menggunakan kombinasi peta lambda + satu baris berikut, dan 'Lihat, Bu, tidak ada IF atau FORs!' :# This substitutes all '1' with '10' in list 'a' and places result in list 'c':
c = list(map(lambda b: b.replace("1","10"), a))
sumber
lambda
pada setiap elemen daftar ...Berikut ini adalah metode yang sangat langsung di Python 2.x
Metode ini berhasil. Komentar diterima. Semoga bermanfaat :)
Juga mencoba memahami bagaimana outis ini dan damzam ini solusi kerja. Daftar kompresi dan fungsi lambda adalah alat yang berguna.
sumber
Pada daftar panjang dan kejadian langka sekitar 3x lebih cepat menggunakan
list.index()
- dibandingkan dengan metode iterasi satu langkah yang disajikan dalam jawaban lain.sumber
Saya tahu ini adalah pertanyaan yang sangat lama dan ada banyak cara untuk melakukannya. Yang lebih sederhana yang saya temukan adalah menggunakan
numpy
paket.sumber
Usecase saya diganti
None
dengan beberapa nilai default.Saya telah menghitung waktu pendekatan untuk masalah ini yang disajikan di sini, termasuk yang oleh @kxr - using
str.count
.Uji kode dalam ipython dengan Python 3.8.1:
Saya mendapat:
Menggunakan internal
str.index
sebenarnya lebih cepat daripada perbandingan manual.Saya tidak tahu apakah pengecualian dalam tes 4 akan lebih sulit daripada menggunakan
str.count
, perbedaannya tampaknya dapat diabaikan.Perhatikan bahwa
map()
(tes 6) mengembalikan iterator dan bukan daftar yang sebenarnya, dengan demikian tes 7.sumber
Anda bisa menggunakan daftar pemahaman dalam python:
untuk kasus Anda, di mana Anda ingin mengganti semua kejadian 1 dengan 10, cuplikan kode akan seperti ini:
sumber
Temukan & ganti hanya satu item
sumber