Mencari Semua Pilihan Tetap Yang Mungkin bagi Rentetan Diberi dalam Python
Tugas menjana semua pilih atur yang boleh dilaksanakan bagi rentetan input yang diberikan mempunyai penyelesaian yang mudah dalam Python. Untuk memulakan tugas ini, kami mula-mula mempertimbangkan rentetan input, yang akan kami cuba susun semula. Sebagai ilustrasi, mari kita ambil rentetan 'tindanan' sebagai contoh:
<code class="python">x = 'stack'</code>
Matlamat kami adalah untuk mencipta pilih atur 'tindanan' dengan menyusun semula aksaranya.
<code class="python">l=['stack','satck','sackt'.......]</code>
Secara tradisinya, satu mungkin mempertimbangkan pendekatan berulang untuk menyelesaikan cabaran ini, melibatkan pemilihan rawak dan transposisi pasangan aksara untuk menjana pilih atur baharu. Walau bagaimanapun, kami boleh memudahkan tugas kami dengan menggunakan kaedah pilih atur() yang disediakan oleh modul itertools. Seperti yang dicadangkan oleh dokumentasinya:
itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.
Menggunakan kaedah ini dalam senario kami memerlukan kami mematuhi pertimbangan berikut:
Oleh itu, untuk mendapatkan pilih atur yang diingini, kami menggunakan pendekatan berikut:
<code class="python">from itertools import permutations perms = [''.join(p) for p in permutations('stack')]</code>
Pendekatan ini menghasilkan 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']
Jika kami menemui pendua dalam pilih atur kami, kami boleh mengendalikannya dengan menstruktur semula data kami ke dalam format yang menghalang pendua, seperti set:
<code class="python">perms = [''.join(p) for p in permutations('stacks')] len(perms) # 720 len(set(perms)) # 360</code>
Atas ialah kandungan terperinci Bagaimanakah anda menjana semua pilih atur yang mungkin bagi rentetan yang diberikan dalam Python menggunakan modul `itertools`, dan bagaimana anda mengendalikan kemungkinan pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!