Saya punya dua daftar seperti di bawah ini
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
Saya ingin mengekstrak entri dari entries
saat mereka berada di tags
:
result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.extend(entry)
Bagaimana saya bisa menulis dua loop sebagai pemahaman daftar baris tunggal?
python
list
for-loop
list-comprehension
Shiva Krishna Bavandla
sumber
sumber
itertools.chain
jika Anda menginginkan daftar yang datar:list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
Jawaban:
Ini harus melakukannya:
sumber
Cara terbaik untuk mengingat ini adalah bahwa urutan perulangan for di dalam pemahaman daftar didasarkan pada urutan kemunculannya dalam pendekatan perulangan tradisional. Loop paling luar muncul lebih dulu, dan kemudian loop dalam selanjutnya.
Jadi, pemahaman daftar yang setara adalah:
Secara umum,
if-else
pernyataan muncul sebelum perulangan for yang pertama, dan jika Anda hanya memiliki sebuahif
pernyataan, itu akan muncul di bagian akhir. Misalnya, jika Anda ingin menambahkan daftar kosong, jikatag
tidak ada di entri, Anda akan melakukannya seperti ini:sumber
LC yang sesuai adalah
Urutan loop di LC mirip dengan yang di loop bersarang, pernyataan if pergi ke akhir dan ekspresi kondisional pergi di awal, sesuatu seperti
Lihat Demo -
EDIT - Karena, Anda ingin hasilnya diratakan, Anda bisa menggunakan pemahaman daftar yang serupa dan kemudian meratakan hasilnya.
Menambahkan ini bersama-sama, Anda bisa melakukannya
Anda menggunakan ekspresi generator di sini, bukan pemahaman daftar. (Sangat cocok dengan batas 79 karakter juga (tanpa
list
panggilan))sumber
Keluaran:
sumber
sumber
Dalam pemahaman, iterasi daftar bersarang harus mengikuti urutan yang sama dari imbricated yang setara untuk loop.
Untuk memahaminya, kami akan mengambil contoh sederhana dari NLP. Anda ingin membuat daftar semua kata dari daftar kalimat di mana setiap kalimat adalah daftar kata.
Untuk menghapus kata yang berulang, Anda bisa menggunakan set {} daripada daftar []
atau terapkan
list(set(all_words))
sumber