繁体   English   中英

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

[英]How to use itertools to output results of only a certain length

假设我有一个字节列表(x00 to xFF) 如何使用itertools仅返回长度为X的排列。例如,我希望所有长度为3的排列,那么我将得到

[x00,x00,x00], [x00,x00,x01], ..., [xFF,xFF,xFF]

这样就不会浪费计算资源。

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

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

itertools.combinations_with_replacement

>>> my_list = [1, 2, 3, 4]
>>> import itertools
>>> 
>>> list(itertools.combinations_with_replacement(my_list, 3))
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), 
 (1, 2, 2), (1, 2, 3), (1, 2, 4), 
 (1, 3, 3), (1, 3, 4), 
 (1, 4, 4), 
 (2, 2, 2), (2, 2, 3), (2, 2, 4), 
 (2, 3, 3), (2, 3, 4), 
 (2, 4, 4), 
 (3, 3, 3), (3, 3, 4), 
 (3, 4, 4), 
 (4, 4, 4)]

似乎您希望所有置换都可以替换。 在这种情况下,您需要: itertools.product如@gnibbler的答案。

看来@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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM