Penjanaan Komprehensif Gabungan Senarai: Pendekatan Cekap Numerik
Memandangkan senarai 15 nombor, matlamatnya adalah untuk mendapatkan kesemua 32,768 kombinasi, tanpa mengira panjangnya. Satu pendekatan yang dicadangkan melibatkan lelaran melalui integer perpuluhan (1-32768) dan menggunakan perwakilan binari untuk memilih elemen. Walaupun kaedah ini kelihatan berdaya maju, penyelesaian yang lebih cekap wujud.
Memanfaatkan Modul itertools
Modul Python itertools menyediakan pendekatan komprehensif untuk menjana kombinasi. Salah satu fungsinya, gabungan, membolehkan penjanaan gabungan panjang tertentu. Walau bagaimanapun, matlamat dalam kes ini adalah untuk menjana kombinasi panjang sewenang-wenangnya.
Untuk menangani ini, seseorang boleh menggelungkan semua panjang yang mungkin "L" menggunakan fungsi julat:
import itertools stuff = [1, 2, 3] for L in range(len(stuff) + 1): for subset in itertools.combinations(stuff, L): print(subset)
Ini kaedah memastikan penjanaan semua kombinasi senarai yang diberikan, tanpa mengira panjangnya.
Pendekatan Alternatif untuk Kerumitan dan Keanggunan
Untuk pendekatan yang lebih fleksibel dan berpotensi menarik secara visual, seseorang boleh menggunakan rantai penjana untuk mencipta jujukan kombinasi() penjana, meliputi semua panjang yang mungkin:
from itertools import chain, combinations def all_subsets(ss): return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1))) for subset in all_subsets(stuff): print(subset)
Dengan menggunakan kaedah ini, semua kemungkinan kombinasi senarai yang diberikan dijana dengan mudah, memberikan penyelesaian yang mantap.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menjana Semua Subset Senarai yang Berkemungkinan dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!