Ini lebih lanjut tentang sintaksis pemahaman daftar python. Saya memiliki pemahaman daftar yang menghasilkan daftar angka ganjil dari rentang tertentu:
[x for x in range(1, 10) if x % 2]
Ini membuat filter - Saya punya daftar sumber, tempat saya menghapus angka genap ( if x % 2
). Saya ingin menggunakan sesuatu seperti if-then-else di sini. Kode berikut gagal:
>>> [x for x in range(1, 10) if x % 2 else x * 100]
File "<stdin>", line 1
[x for x in range(1, 10) if x % 2 else x * 100]
^
SyntaxError: invalid syntax
Ada ekspresi python seperti if-else:
1 if 0 is 0 else 3
Bagaimana cara menggunakannya dalam pemahaman daftar?
()
bukan[]
.if x % 2
eliminasi bahkan nomor (bukan menjaga mereka) - hal ini karena ketikax
bahkan yangx % 2
hasil ekspresi0
, yang, pada gilirannya, mengevaluasi keFalse
, sementara setiapint
kecuali0
mengevaluasi keTrue
.Jawaban:
x if y else z
adalah sintaks untuk ekspresi yang Anda kembalikan untuk setiap elemen. Maka Anda membutuhkan:Kebingungan muncul dari fakta Anda menggunakan filter pada contoh pertama, tetapi tidak pada yang kedua. Dalam contoh kedua Anda hanya memetakan setiap nilai ke yang lain, menggunakan ekspresi operator ternary.
Dengan filter, Anda perlu:
Tanpa filter Anda perlu:
dan dalam contoh kedua Anda, ekspresi itu "kompleks", yang kebetulan melibatkan sebuah
if-else
.sumber
[x for x in range(1, 10) if x % 2]
adalah sintaks yang benar.[x if x % 2 for x in range(1, 10)]
- ini bukan, tapi[x if x%2 else x*100 for x in range(1, 10)]
sekali lagi, sintaks yang benar. Bagaimana bisa?else
), atau filter (karena itu padaEXP
bagian dari pemahaman daftar)if
di akhir:[x if x%2 else x*100 for x in range(1, 10) if not x%3]
Yang pertamaif
adalah bagian dari operator ternary, yang keduaif
adalah bagian dari sintaksis pemahaman daftar. Seluruhnyax if x%2 else x*100
"pada tingkat yang sama" sebagai sederhana2*x
, itu ekspresi untuk mengevaluasi di sisi kirifor
, ketika penyaringanif not x%3
sudah terjadi.for i in x:
dan kemudian dalam for loopif i == y:
?sumber
Anda dapat melakukannya dengan pemahaman daftar juga:
sumber
Hanya solusi lain, semoga seseorang menyukainya:
Menggunakan: [Salah, Benar] [Ekspresi]
sumber
Saya bisa melakukan ini
sumber