Saya ingin membandingkan 2 iterable dan mencetak item yang muncul di kedua iterable.
>>> a = ('q', 'r')
>>> b = ('q')
# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
^
Tapi itu memberi saya kesalahan sintaks yang tidak valid di mana ^
telah ditempatkan. Apa yang salah dengan fungsi lamba ini?
python
if-statement
list-comprehension
OrangeTux
sumber
sumber
b = ('q')
tidak membuat tupel. Tupel dengan satu elemen membutuhkan eksplisit,
, yaitub = ('q',)
tuples
menjadiiterables
.Jawaban:
Anda salah memesan. The
if
harus setelahfor
(kecuali dalamif-else
operator ternary)Namun ini akan berhasil:
sumber
Anda meletakkan
if
di akhir:Pemahaman daftar ditulis dalam urutan yang sama seperti rekan-rekan mereka yang ditentukan penuh bersarang, pada dasarnya pernyataan di atas diterjemahkan menjadi:
Versi Anda mencoba melakukan ini sebagai gantinya:
tetapi pemahaman daftar harus dimulai dengan setidaknya satu putaran luar.
sumber
daftar rumus pemahaman:
jadi Anda bisa melakukannya seperti ini:
Hanya untuk tujuan demonstrasi: [y if y not in b else False for y in a]
sumber
else
pemahaman ke dalam daftar, tidak di tempat yang paling tidak Anda masukkan. Jangan bingung antara pemahaman daftar (pemfilteran), dengan ekspresi kondisional (yang harus memiliki nilai, membuat ekspresi else wajib).else
digunakan dalam pemahaman daftar meskipun seperti yang ditunjukkan dalam kode.Ini bukan fungsi lambda. Ini adalah pemahaman daftar.
Ubah saja urutannya:
sumber
Saya meneliti dan mencoba saran pemahaman daftar yang disebutkan di atas untuk situasi saya seperti yang dijelaskan di bawah ini tetapi tidak berhasil. Apa yang saya lakukan salah di sini?
Itu tidak menyaring kata-kata.
sumber