Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Senarai Pemahaman Mempunyai Leter Bergantung?

Bolehkah Senarai Pemahaman Mempunyai Leter Bergantung?

Barbara Streisand
Barbara Streisandasal
2024-11-02 13:21:02600semak imbas

 Can List Comprehensions Have Dependent Iterators?

Iterators Bebas dalam Pemahaman Senarai

Dalam Python, pemahaman senarai membenarkan berbilang gelung lelaran. Pertimbangkan contoh berikut:

<code class="python">[(x, y) for x in a for y in b]</code>

di mana a dan b ialah jujukan. Pemahaman ini mencipta pasangan elemen daripada hasil darab Cartesian a dan b.

Bolehkah Peulang Bergantung?

Bolehkah satu lelaran dalam pemahaman senarai merujuk kepada yang lain? Jawapannya ialah ya, dan kod berikut menunjukkannya:

<code class="python">[x for x in a for a in b]</code>

Dalam pemahaman ini, lelaran gelung luar a menjadi lelaran untuk gelung dalam. Ini secara berkesan meratakan senarai bersarang.

Contoh

Jika kami mempunyai senarai bersarang a:

<code class="python">a = [[1, 2], [3, 4]]</code>

Pemahaman senarai berikut akan meratakannya ke dalam satu senarai:

<code class="python">[x for x in a for a in b]</code>

Hasil:

[1, 2, 3, 4]

Penyelesaian Alternatif Menggunakan Penjana

Dalam kod Python yang disediakan, teksnya ialah disimpan sebagai ayat, dan tugasnya adalah untuk mengeluarkan satu senarai perkataan. Begini cara anda boleh mencapai ini menggunakan penjana:

<code class="python">text = ((&quot;Hi&quot;, &quot;Steve!&quot;), (&quot;What's&quot;, &quot;up?&quot;))
gen = (word for sentence in text for word in sentence)</code>

Pembolehubah gen kini menghasilkan senarai perkataan yang diratakan:

<code class="python">for word in gen:
    print(word)</code>

Output:

Hi
Steve!
What's
up?

Atas ialah kandungan terperinci Bolehkah Senarai Pemahaman Mempunyai Leter Bergantung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn