是否有Python函数可以找到列表的所有k位长排序?

问题描述 投票:0回答:1

我不相信这个精确的问题以前曾被问过。我最近遇到了一个问题,我必须找到这样的一套。一个示例可能会有所帮助:-

给出一些列表:

list1 = ['a', 'b']

是否有一个函数返回以下集合?

output = {('a', 'b'), ('a', 'a'), ('b', 'b'), ('b', 'a')}

我已经可以使用itertools combinations_with_replacementpermutations函数生成所需的输出,如下所示:

from itertools import combinations_with_replacement, permutations
set1 = set(combinations_with_replacement(['a', 'b'], 2))
set2 = set(permutations(['a', 'b'], 2))

>>> set1
{('a', 'b'), ('a', 'a'), ('b', 'b')}
>>> set2
{('b', 'a'), ('a', 'b')}

set1.update(set2)

>>> set1
{('a', 'b'), ('a', 'a'), ('b', 'b'), ('b', 'a')}

有这样一套的名字吗?我可以使用其他方法吗?

python combinations permutation
1个回答
2
投票

您要itertools.product

>>> import itertools
>>> set(itertools.product(set(list1), repeat=2))
{('a', 'b'), ('b', 'a'), ('b', 'b'), ('a', 'a')}

带有itertools.product参数的[repeat本质上是“ permutations_with_replacement”,这似乎是您想要的。


0
投票

Itertools.product()完成您想要的事情:

mylist = ['a', 'b']
list(itertools.product(mylist, repeat=2))

Out[8]: [('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
© www.soinside.com 2019 - 2024. All rights reserved.