在python中查找给定字符串的所有可能排列

编程入门 行业动态 更新时间:2024-10-25 05:18:07
本文介绍了在python中查找给定字符串的所有可能排列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个字符串.我想通过更改字符串中的字符顺序来从该字符串生成所有排列.例如,说:

I have a string. I want to generate all permutations from that string, by changing the order of characters in it. For example, say:

x='stack'

我想要的是这样的列表,

what I want is a list like this,

l=['stack','satck','sackt'.......]

目前,我正在迭代字符串的列表强制转换,随机选择2个字母并将它们转换为新的字符串,然后将其添加到l的设置强制转换中.根据字符串的长度,我正在计算可能的排列数量,并继续迭代直到集合大小达到极限. 必须有更好的方法来做到这一点.

Currently I am iterating on the list cast of the string, picking 2 letters randomly and transposing them to form a new string, and adding it to set cast of l. Based on the length of the string, I am calculating the number of permutations possible and continuing iterations till set size reaches the limit. There must be a better way to do this.

推荐答案

itertools模块具有一个有用的方法,称为permutations(). 文档说:

The itertools module has a useful method called permutations(). The documentation says:

itertools.permutations(iterable [,r])

返回迭代器中元素的连续r长度排列.

Return successive r length permutations of elements in the iterable.

如果未指定r或为None,则r默认为 可迭代,并生成所有可能的全长置换.

If r is not specified or is None, then r defaults to the length of the iterable and all possible full-length permutations are generated.

排列以字典顺序排序.所以,如果输入 iterable被排序,排列后的元组将被排序 订单.

Permutations are emitted in lexicographic sort order. So, if the input iterable is sorted, the permutation tuples will be produced in sorted order.

不过,您必须将排列的字母作为字符串连接起来.

You'll have to join your permuted letters as strings though.

>>> from itertools import permutations >>> perms = [''.join(p) for p in permutations('stack')] >>> perms

[堆栈","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']

['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']

如果发现自己受到重复的困扰,请尝试将数据拟合到没有重复的结构中,例如set:

If you find yourself troubled by duplicates, try fitting your data into a structure with no duplicates like a set:

>>> perms = [''.join(p) for p in permutations('stacks')] >>> len(perms) 720 >>> len(set(perms)) 360

感谢@pst指出这不是我们传统上认为的类型转换,而是对set()构造函数的调用.

Thanks to @pst for pointing out that this is not what we'd traditionally think of as a type cast, but more of a call to the set() constructor.

更多推荐

在python中查找给定字符串的所有可能排列

本文发布于:2023-10-26 11:54:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1530056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   排列   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!