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

发布于 2021-01-29 19:30:17

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

x='stack'

我想要的是这样的清单,

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

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

关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    itertools.permutations(iterable [,r])

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

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

    排列以字典顺序排序。因此,如果对输入的iterable进行排序,则将按排序顺序生成置换元组。

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

    >>> 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’]


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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看