-1

我想要我拥有的列表列表的所有排列和组合,我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] 这是一个维度,结果不应该包含这个确切的维度再次列出,因为这代表一种体型。

4

3 回答 3

3

该列表将包含 20 ** 11 = 2 ** 11 * 10 ** 11 = 204800000000000 个元素。这就是问题所在。

尽管 itertools.product 是一个不会无限期挂起的迭代器(迭代所有内容需要很长时间),但将其转换为 list() 将挂起,直到它用完所有内存。

于 2013-10-25T12:02:16.297 回答
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

工作示例

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

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

工作示例

于 2013-10-25T12:03:06.053 回答
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) ...

所以“什么都没有”是错误的,结果列表非常大,无法一次计算

于 2013-10-25T12:07:43.897 回答