Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 查找列表中元素的所有可能配置,保持元素和列表长度_Python_List_Combinations - Fatal编程技术网

Python 查找列表中元素的所有可能配置,保持元素和列表长度

Python 查找列表中元素的所有可能配置,保持元素和列表长度,python,list,combinations,Python,List,Combinations,我希望通过切换元素的顺序来查找列表中的每个元素组合,同时保持它们的计数和列表的长度 例如,对于列表: [1,2,1,3] 我希望获得以下资料: [1,1,2,3] [1,1,3,2] [1,2,1,3] [1,2,3,1] [1,3,1,2] [1,3,2,1] [2,1,1,3] [2,1,3,1] [2,3,1,1] [3,1,1,2] [3,1,2,1] [3,2,1,1] 请注意,相同的元素,例如原始列表中的两个1,不会被视为单独的元素,因此两种可能性[1a、1b、2,3]和

我希望通过切换元素的顺序来查找列表中的每个元素组合,同时保持它们的计数和列表的长度

例如,对于列表:

[1,2,1,3]
我希望获得以下资料:

[1,1,2,3]    
[1,1,3,2]
[1,2,1,3]
[1,2,3,1]
[1,3,1,2]
[1,3,2,1]
[2,1,1,3]
[2,1,3,1]
[2,3,1,1]
[3,1,1,2]
[3,1,2,1]
[3,2,1,1]

请注意,相同的元素,例如原始列表中的两个1,不会被视为单独的元素,因此两种可能性[1a、1b、2,3]和[1b、1a、2,3]必须被视为一个

您希望删除重复的排列,因为有两个相同的元素,使用集合并转换为列出每个元素或保留为元组

import itertools

s = [1,2,1,3]
for x in set(itertools.permutations(s)):
    print(list(x))
结果:

[1, 2, 3, 1]
[1, 3, 2, 1]
[3, 1, 1, 2]
[2, 1, 3, 1]
[2, 3, 1, 1]
[1, 2, 1, 3]
[1, 1, 2, 3]
[3, 1, 2, 1]
[3, 2, 1, 1]
[1, 1, 3, 2]
[1, 3, 1, 2]
[2, 1, 1, 3]
这将产生12个元素,而使用置换时为24个元素,但由于有2个相同的元素,因此该数字被2除

作为理解:

result = [list(x) in set(itertools.permutations(s))]

请注意,一般来说,使用set从组合或置换中删除重复项并不是最有效的解决方案。这里很简单,也没有什么损失,因为结果/计算比率不是指数级的,我在这里尝试过这种技术,这太浪费了:,计算720个排列,得到15个组的列表。

你想要删除重复的排列,因为有2个相同的元素,使用集合并转换以列出每个元素或保留为元组

import itertools

s = [1,2,1,3]
for x in set(itertools.permutations(s)):
    print(list(x))
结果:

[1, 2, 3, 1]
[1, 3, 2, 1]
[3, 1, 1, 2]
[2, 1, 3, 1]
[2, 3, 1, 1]
[1, 2, 1, 3]
[1, 1, 2, 3]
[3, 1, 2, 1]
[3, 2, 1, 1]
[1, 1, 3, 2]
[1, 3, 1, 2]
[2, 1, 1, 3]
这将产生12个元素,而使用置换时为24个元素,但由于有2个相同的元素,因此该数字被2除

作为理解:

result = [list(x) in set(itertools.permutations(s))]

请注意,一般来说,使用set从组合或置换中删除重复项并不是最有效的解决方案。这里很简单,也没有什么损失,因为结果/计算比率不是指数级的。我在这里尝试过这种技术,这太浪费了:,计算720个排列,得到15个组的列表。

itertools.permutations不正是这样做的吗?但是置换返回24个元素,你只有12个元素。@Jean-Françoisfare我认为setitertools.permutations可以做到。@RuthC是的,我认为它outtermutations AFAIK没有按照最后一句的要求处理列表中的重复元素。一个有效的解决方案是setpermutations[…],但可能存在更高性能的东西,这不正是itertools.permutations所做的吗?但是置换返回24个元素,你只有12个元素。@Jean-Françoisfare我认为setitertools.permutations可以做到。@RuthC是的,我认为它outtermutations AFAIK没有按照最后一句的要求处理列表中的重复元素。一个有效的解决方案是setpermutations[…],但可能存在更高性能的东西。这已经是一个重复,我应该知道并且很简单,但是是的,一行程序并不总是最有效的,当复杂性重要时,它已经是一个重复,我应该知道并且很简单,但是是的,一行程序并不总是最有效的,当复杂性重要时