列表python列表的排列

时间:2013-10-25 11:59:54

标签: python python-2.7 permutation

我想要所有列表的排列和组合,我使用itertools.product计算排列,但我的计算机无限期挂起,我可能做错了什么?

import itertools

#Lists of all the possible dimensions
upperchest_dim=range(32,52,1)
upperback_dim=range(32,52,1)
chest_dim=range(32,52,1)
waist_dim=range(32,52,1)
hip_dim=range(32,52,1)
bicep_dim=range(32,52,1)
elbow_dim=range(32,52,1)
thigh_dim=range(32,52,1)
knee_dim=range(32,52,1)
calf_dim=range(32,52,1)
height_dim=range(32,52,1)

#List of lists total
dimensions=[upperchest_dim,upperback_dim,chest_dim,waist_dim,hip_dim,bicep_dim,elbow_dim,thigh_dim,knee_dim,calf_dim,height_dim]

#Generate permutations of all the dimensions
print list(itertools.product(*dimensions))

list(itertools.product(*dimensions))应具有所有维度的所有唯一排列。

- 编辑: 我想我做错了什么。我想要一个列表列表,其中包含所有独特的维度,例如[32,33,34,45,34,23,42,43,43,45,33]这是一个维度,结果不应该包含这个维度再次列出,因为它代表一种体型。

3 个答案:

答案 0 :(得分:3)

该列表将具有20 ** 11 = 2 ** 11 * 10 ** 11 = 204800000000000个元素。那是错的。

虽然itertools.product是一个不会无限期挂起的迭代器(它只需要很长时间来迭代所有它),但将它转换为list()会挂起,直到它使用了所有内存。

答案 1 :(得分:1)

不需要所有这些东西,你可以使用permutations

from itertools import permutations

var = permutations([12, 34, 123, 12, 31, 231])

for perm in var:
    print perm

甚至适用于list个列表:

from itertools import permutations

var = permutations([[1, 2, 3, 4], [24, 5, 12, 3], 123, 12, 31, 231])

for perm in var:
    print perm

工作example

如果出于某种原因你想要所有可能的排列,即使是列表中列表的排列,那么你将不得不使用以下代码:

from itertools import permutations

var = [[1, 2, 3, 4], [24, 5, 12, 3], 123, 12, 31, 231]

# Getting all permutations of lists within the lists
output = []
for l in var:
    if isinstance(l, list):
        output += permutations(l)
    else:
        output.append(l)

perm = permutations(output)

for p in perm:
    print p

工作example

答案 2 :(得分:0)

如果你在最后一行做

for d in itertools.product(*dimensions): print(d)

它开始打印

... (32, 32, 32, 32, 32, 32, 32, 33, 37, 47, 45) (32, 32, 32, 32, 32, 32, 32, 33, 37, 47, 46) (32, 32, 32, 32, 32, 32, 32, 33, 37, 47, 47) (32, 32, 32, 32, 32, 32, 32, 33, 37, 47, 48) ...

所以“没有”是错的,结果列表非常大,以至于无法一次性计算