Python 如何使用itertools仅输出特定长度的结果

Python 如何使用itertools仅输出特定长度的结果,python,permutation,itertools,Python,Permutation,Itertools,假设我有一个字节列表(x00到xFF)。如何使用itertools仅返回长度为X的置换。 例如,我想要所有长度为3的排列,然后我得到 [x00,x00,x00], [x00,x00,x01], ..., [xFF,xFF,xFF] 这样就不会浪费计算资源 编辑:如果有更好的方法,则不必是itertools。: 看起来你想要所有的排列,还有替换。在这种情况下,您需要:如@gnibler的答案所示。: import itertools for tup in itertools.product(r

假设我有一个字节列表
(x00到xFF)
。如何使用itertools仅返回长度为X的置换。 例如,我想要所有长度为3的排列,然后我得到

[x00,x00,x00], [x00,x00,x01], ..., [xFF,xFF,xFF]
这样就不会浪费计算资源

编辑:如果有更好的方法,则不必是itertools。

:


看起来你想要所有的排列,还有替换。在这种情况下,您需要:如@gnibler的答案所示。

:

import itertools
for tup in itertools.product(range(0x100), repeat=3):
    ...


看起来你想要所有的排列,还有替换。在这种情况下,您需要:如@gnibler的答案所示。

看来@gnibler的解决方案更正确

import itertools
for tup in itertools.product(range(0x100), repeat=3):
    ...
In [162]: >>> l = [1, 2, 3]

In [163]: list(itertools.combinations_with_replacement(l, 3))
Out[163]:
[(1, 1, 1),
 (1, 1, 2),
 (1, 1, 3),
 (1, 2, 2),
 (1, 2, 3),
 (1, 3, 3),
 (2, 2, 2),
 (2, 2, 3),
 (2, 3, 3),
 (3, 3, 3)]

In [164]: list(itertools.product(l, repeat=3))
Out[164]:
[(1, 1, 1),
 (1, 1, 2),
 (1, 1, 3),
 (1, 2, 1),
 (1, 2, 2),
 (1, 2, 3),
 (1, 3, 1),
 (1, 3, 2),
 (1, 3, 3),
 (2, 1, 1),
 (2, 1, 2),
 (2, 1, 3),
 (2, 2, 1),
 (2, 2, 2),
 (2, 2, 3),
 (2, 3, 1),
 (2, 3, 2),
 (2, 3, 3),
 (3, 1, 1),
 (3, 1, 2),
 (3, 1, 3),
 (3, 2, 1),
 (3, 2, 2),
 (3, 2, 3),
 (3, 3, 1),
 (3, 3, 2),
 (3, 3, 3)]

似乎@gnibbler的解决方案更正确

In [162]: >>> l = [1, 2, 3]

In [163]: list(itertools.combinations_with_replacement(l, 3))
Out[163]:
[(1, 1, 1),
 (1, 1, 2),
 (1, 1, 3),
 (1, 2, 2),
 (1, 2, 3),
 (1, 3, 3),
 (2, 2, 2),
 (2, 2, 3),
 (2, 3, 3),
 (3, 3, 3)]

In [164]: list(itertools.product(l, repeat=3))
Out[164]:
[(1, 1, 1),
 (1, 1, 2),
 (1, 1, 3),
 (1, 2, 1),
 (1, 2, 2),
 (1, 2, 3),
 (1, 3, 1),
 (1, 3, 2),
 (1, 3, 3),
 (2, 1, 1),
 (2, 1, 2),
 (2, 1, 3),
 (2, 2, 1),
 (2, 2, 2),
 (2, 2, 3),
 (2, 3, 1),
 (2, 3, 2),
 (2, 3, 3),
 (3, 1, 1),
 (3, 1, 2),
 (3, 1, 3),
 (3, 2, 1),
 (3, 2, 2),
 (3, 2, 3),
 (3, 3, 1),
 (3, 3, 2),
 (3, 3, 3)]

不确定这是否是OP想要的。你不会得到[x00,x01,x00],[x01,x00,x00]等等way@gnibbler. 是的,现在我找到你了。因为OP的输出中没有具体说明,所以我首先弄错了。:)是的,我想要重复,就像@gnibbler所说的那样。我不确定这是否是OP想要的。你不会得到[x00,x01,x00],[x01,x00,x00]等等way@gnibbler. 是的,现在我找到你了。因为OP的输出中没有具体说明,所以我首先弄错了。:)是的,我想要重复,就像@gnibbler所说的那样