如果我正确理解itertools
"combinatoric iterators"文档,那么该想法是为每个常见的组合迭代提供一组标准功能。
但是我今天想念一个。我需要遍历具有重复项的每个排序组合。
combination_with_replacement('abcd', 4)
产生
('a', 'a', 'a', 'a')
('a', 'a', 'a', 'b')
('a', 'a', 'a', 'c')
('a', 'a', 'a', 'd')
('a', 'a', 'b', 'b')
('a', 'a', 'b', 'c')
('a', 'a', 'b', 'd')
('a', 'a', 'c', 'c')
('a', 'a', 'c', 'd')
... etc
但是(即使结果是按元组排序的),这些组合也不是有序的。
我希望理想的ordered_combination_with_replacement('abcd', 4)
会带来更多结果,因为我需要进行区分
('a', 'a', 'a', 'a')
('a', 'a', 'a', 'b')
('a', 'a', 'b', 'a')
('a', 'b', 'a', 'a')
('b', 'a', 'a', 'a')
('a', 'a', 'a', 'c')
('a', 'a', 'c', 'a')
... etc
换句话说:今天的订单很重要。
itertool是否提供这样的迭代?为什么不呢,或者为什么我错过了呢?
迭代这些的标准方法是什么?
我需要自己编写这个通用迭代器吗?
答案 0 :(得分:1)
要总结一些评论,至少有两种方法可以做到:
itertools.combinations_with_replacement("abcd", 4)
和
itertools.product("abcd", repeat=4)
两者均产生以下所需结果:
[('a', 'a', 'a', 'a'),
('a', 'a', 'a', 'b'),
('a', 'a', 'a', 'c'),
('a', 'a', 'a', 'd'),
('a', 'a', 'b', 'a'),
...