Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menjana semua pilih atur yang mungkin bagi rentetan dalam Python, termasuk mengendalikan pendua?

Bagaimanakah saya boleh menjana semua pilih atur yang mungkin bagi rentetan dalam Python, termasuk mengendalikan pendua?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 04:16:30905semak imbas

How can I generate all possible permutations of a string in Python, including handling duplicates?

Permuting Strings in Python

Mencari semua pilih atur yang mungkin bagi rentetan tertentu boleh menjadi tugas yang mencabar. Walau bagaimanapun, Python menyediakan penyelesaian mudah menggunakan modul itertools.

Penyelesaian: itertools.permutations()

Kaedah itertools.permutations() direka khusus untuk menjana pilih atur . Ia mengambil iterable sebagai input dan mengembalikan objek penjana yang berulang ke atas semua pilih atur yang mungkin bagi iterable.

Dalam kes rentetan, kita boleh menukarnya kepada iterable menggunakan fungsi list(). Untuk mendapatkan semua pilih atur rentetan yang mungkin, kami menggunakan kod berikut:

<code class="python">from itertools import permutations
string = 'stack'
perms = [''.join(p) for p in permutations(list(string))]</code>

Hasilnya ialah senarai rentetan yang mengandungi semua pilih atur rentetan asal.

Pengendalian Pendua

Jika anda ingin mengecualikan pilih atur pendua, anda boleh menggunakan set kerana ia hanya mengekalkan elemen unik.

<code class="python">perms = set([''.join(p) for p in permutations(list(string))])</code>

Kelebihan itertools.permutations()

  • Cekap: Kaedah menggunakan pelaksanaan berasaskan C untuk pelaksanaan pantas.
  • Komprehensif: Ia menjana semua pilih atur yang mungkin tanpa mengulangi apa-apa.
  • Boleh disesuaikan: Bilangan pilih atur boleh dikawal dengan menentukan parameter 'r'.

Contoh Output

Untuk 'tindanan' rentetan, senarai output akan mengandungi pilih atur berikut:

['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta', 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']

Atas ialah kandungan terperinci Bagaimanakah saya boleh menjana semua pilih atur yang mungkin bagi rentetan dalam Python, termasuk mengendalikan pendua?. 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