Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Membahagikan Senarai Dengan Cekap Berdasarkan Syarat?

Bagaimanakah Saya Boleh Membahagikan Senarai Dengan Cekap Berdasarkan Syarat?

Barbara Streisand
Barbara Streisandasal
2024-12-13 16:23:20344semak imbas

How Can I Efficiently Partition a List Based on a Condition?

Pembahagian Senarai Berdasarkan Syarat

Apabila membahagikan senarai kepada dua berdasarkan syarat yang diberikan, tergoda untuk mengulangi senarai dua kali, mencipta dua senarai baharu seperti berikut:

good = [x for x in mylist if x in goodvals]
bad = [x for x in mylist if x not in goodvals]

Walau bagaimanapun, pendekatan ini memerlukan dua yang berasingan lelaran ke atas senarai, yang boleh menjadi tidak cekap. Untuk meningkatkan prestasi, pertimbangkan untuk menggunakan lelaran manual dengan penambahan bersyarat:

good, bad = [], []
for x in mylist:
    (bad, good)[x in goodvals].append(x)

Dalam kod ini:

  • Kami memulakan dua senarai kosong, baik dan buruk, untuk menyimpan elemen yang dibahagikan .
  • Kami mengulangi elemen senarai saya.
  • Untuk setiap elemen x, kami menggunakan ungkapan (buruk, baik)[x dalam goodvals] untuk memilih senarai yang sesuai berdasarkan keadaan x dalam goodvals.
  • Ungkapan ini dinilai buruk jika x tidak memenuhi syarat dan baik sebaliknya.
  • Kami tambahkan x ke senarai yang dipilih menggunakan kaedah tambah.

Pendekatan ini mengelakkan keperluan untuk dua lelaran berasingan, meningkatkan prestasi dengan mengurangkan bilangan senaraikan laluan dari dua ke satu. Ia juga dianggap lebih elegan, kerana ia menangkap logik pembahagian dengan cara yang ringkas dan boleh dibaca.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Senarai Dengan Cekap Berdasarkan Syarat?. 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