Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Kita Boleh Menjana Set Kuasa Set Diberi dengan Cekap?

Bagaimanakah Kita Boleh Menjana Set Kuasa Set Diberi dengan Cekap?

DDD
Lepaskan: 2024-12-05 06:15:11
asal
558 orang telah melayarinya

How Can We Efficiently Generate the Powerset of a Given Set?

Penjanaan Powerset: Pendekatan Elegan

Soalan:
Memandangkan satu set, bagaimana kita boleh mengira dengan cekap set kuasa, yang merangkumi semua kemungkinan subset asal set?

Jawapan:
Modul itertools serba boleh Python menawarkan penyelesaian yang luar biasa untuk penjanaan set kuasa, seperti yang ditunjukkan di bawah:

from itertools import chain, combinations

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

Penjelasan:

  • Fungsi ini dinamakan "powerset" berfungsi dengan objek boleh lelar.
  • Kod merentasi julat integer daripada 0 hingga kepanjangan boleh lelar tambah 1.
  • Untuk setiap integer, ia menjana gabungan unsur daripada boleh lelar, di mana bilangan elemen yang dipilih sejajar dengan integer semasa.
  • Fungsi "rantai" daripada itertools digunakan pada gabungkan gabungan ini menjadi satu lelar tunggal yang mewakili set kuasa.

Output:
Apabila kita menggunakan fungsi set kuasa ini kepada boleh lelar yang mengandungi unsur "abcd", ia menghasilkan mengikuti set kuasa:

[(), ('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 tuple kosong awal dalam output tidak diingini, ubah sahaja pernyataan julat untuk menggunakan julat 1 kepada panjang boleh ulang tambah 1, dengan berkesan mengecualikan gabungan kosong daripada set kuasa.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menjana Set Kuasa Set Diberi dengan Cekap?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan