Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menjana Semua Subset (Powerset) Set Diberi dengan Cekap dalam Python?

Bagaimanakah Saya Boleh Menjana Semua Subset (Powerset) Set Diberi dengan Cekap dalam Python?

Linda Hamilton
Lepaskan: 2024-12-04 02:15:11
asal
620 orang telah melayarinya

How Can I Efficiently Generate All Subsets (Powerset) of a Given Set in Python?

Mencari Semua Subset Set: Powerset

Memandangkan set elemen, mencari semua subsetnya boleh menjadi tugas pengaturcaraan biasa . Ini dikenali sebagai membina set kuasa set.

Penyelesaian Menggunakan itertools

Modul Python itertools menyediakan penyelesaian yang elegan untuk mengira set kuasa menggunakan kombinasi:

from itertools import chain, combinations

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
Salin selepas log masuk

Bagaimana ia Berfungsi

Fungsi ini menjana semua gabungan elemen dalam set, daripada set kosong kepada set penuh. Ia mencapai ini dengan mengulang julat saiz subset yang mungkin (0 kepada bilangan elemen dalam set) dan mencipta gabungan elemen untuk setiap saiz.

Contoh

Sebagai contoh, set kuasa set {0, 1, 2, 3} ialah:

list(powerset("abcd"))
[(), ('a',), ('b',), ('c',), ('d',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b', 'c', 'd')]
Salin selepas log masuk

Penyesuaian

Jika anda ingin mengecualikan subset kosong daripada set kuasa, anda boleh mengubah suai pernyataan julat dalam fungsi set kuasa kepada julat(1 , len(s) 1):

def powerset(iterable):
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Subset (Powerset) Set Diberi dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan