Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个Python函数可以查找列表的所有k长度排序?_Python_Combinations_Permutation - Fatal编程技术网

是否有一个Python函数可以查找列表的所有k长度排序?

是否有一个Python函数可以查找列表的所有k长度排序?,python,combinations,permutation,Python,Combinations,Permutation,我不相信以前有人问过这个确切的问题。我最近遇到了一个问题,我必须找到这样一套。举个例子可能会有所帮助:- 给出一些列表: list1 = ['a', 'b'] 是否有返回以下集合的函数 output = {('a', 'b'), ('a', 'a'), ('b', 'b'), ('b', 'a')} 我已经能够使用itertools组合与替换和置换功能生成所需的输出,如下所示: from itertools import combinations_with_replacement, perm

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

给出一些列表:

list1 = ['a', 'b']
是否有返回以下集合的函数

output = {('a', 'b'), ('a', 'a'), ('b', 'b'), ('b', 'a')}
我已经能够使用
itertools
组合与替换
置换
功能生成所需的输出,如下所示:

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')}

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

您需要
itertools.product

>>> import itertools
>>> set(itertools.product(list1, repeat=2))
{('a', 'b'), ('b', 'a'), ('b', 'b'), ('a', 'a')}
itertools.product
repeat
参数本质上是“
permutations\u with\u replacement
”,这似乎是您想要的。

itertools.product()实现了您想要的:

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

Out[8]: [('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]

set1
不是你要的那套吗?@Filip不是,因为它是组合。所以
(a,b)
(b,a)
是相同的。但允许替换的事实意味着您至少可以生成
(a,a)
(b,b)
。如果存在一个(标准)函数,我希望它驻留在
itertools
,正如您已经探索过的,但可能有人会发现。我遗漏了什么吗?你想要这个
output={('a','b'),('a','a'),('b','b'),('b','a')}
你得到了这个
{('a','b'),('a','a'),('b','b'),('b','a')}
哪里是problem@Filip我试图找到一种计算输出集的替代方法,正如我从L3viathan的答案itertools.product()中发现的那样是计算乘积集的最佳方法!