Masalah menjana semua kemungkinan gabungan elemen dalam senarai telah membingungkan ramai pengaturcara. Dengan kaedah seperti itertools.combinations(), anda boleh mengambil subset dengan panjang tertentu dengan mudah. Tetapi bagaimana jika anda ingin mengulangi semua saiz subset yang mungkin, daripada gabungan 1 elemen kepada keseluruhan set?
Memang, perwakilan binari integer menawarkan satu pendekatan, tetapi mari kita cari kaedah yang lebih cekap.
Memperkenalkan fungsi itertools.chain() yang berkuasa, yang menggabungkan dengan lancar satu siri iterator menjadi tunggal, lelaran lanjutan. Ini membolehkan kami menjana rangkaian penjana yang menghasilkan subset dengan semua panjang yang mungkin.
Berikut ialah pelaksanaan ringkas menggunakan itertools.chain() dan kombinasi():
from itertools import chain, combinations def all_subsets(ss): return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))
Tidak perlu bekerja keras dengan pengindeksan yang rumit atau penyahkodan binari. Hanya gunakan all_subsets() pada senarai anda dan ia akan dengan mudah mengembalikan rantai tupel yang mewakili semua gabungan elemen yang mungkin.
Sebagai contoh, pertimbangkan senarai [1, 2, 3]. Kod kami menghasilkan:
() (1,) (2,) (3,) (1, 2) (1, 3) (2, 3) (1, 2, 3)
Meliputi semua asas daripada subset kosong kepada set lengkap, pendekatan serba boleh ini menyelesaikan masalah menyenaraikan semua kemungkinan gabungan elemen senarai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Subset Senarai yang Berkemungkinan dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!