Python中没有所有元素重复的组合

2024-09-28 23:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

为了澄清问题,如果我有一个字符串:

'pac'

我想得到它的每个排列的列表,在这个例子中:

^{pr2}$

就像我在Ebay上的搜索引擎中输入任何一个,它会弹出“pac”作为建议。在

“代码贝娄”是我目前所取得的成就,但它显然没有发挥应有的作用Names'是一个包含多个名称的列表,例如:['pac','greg','witch']

    letters = {}
    for name in names:
        temp = []
        letter = []
        temp2 = []

        for let in name:
            let = let.lower()
            temp.append(let)
            letter.append(let)

        for i in range(0, len(name)):
            for j in range(1, len(name) - i):
                print(i, j, end='  ')

                to_add = letter[i] + temp[j]
                print(to_add, temp2)

                temp2.append(to_add)
                letter.append(to_add)
            temp = temp2
            temp2 = []

        letters[name] = letter
    return letters

如果有内置功能,请随时与我分享,但这不是问题的核心。在


Tags: tonameinadd列表forlenrange
1条回答
网友
1楼 · 发布于 2024-09-28 23:26:26

用户标准库itertools

In [48]: T = 'pac'

In [49]: list(itertools.chain(*[itertools.combinations(T, i+1) for i in range(len(T))]))
Out[49]: [('p',), ('a',), ('c',), ('p', 'a'), ('p', 'c'), ('a', 'c'), ('p', 'a', 'c')]

它分为:

1,itertools.combinations(['p', 'a', 'c'], i)生成“pac”的所有子样本,样本大小为i

2,对i=1, 2, 3重复i,并将得到的三个itertools.combination对象放入一个列表中

3、从#2解压列表,并使用那些作为参数来生成itertools.chain对象(顾名思义,它将把它的参数链在一起)。查看更多关于参数unpack

在许多实际的用例中,特别是当元素的总数很大时,您实际上并不想从itertools.chain对象中创建一个列表。使用itertools的目的通常是通过避免将其所有成员都放在内存中来实现内存效率。在

(如果您不想tuples,只需添加一个''.join将它们恢复为字符串)

相关问题 更多 >