迭代列表的每个可能的 n 采样
Posted
技术标签:
【中文标题】迭代列表的每个可能的 n 采样【英文标题】:Iterate over every possible n-sampling of a list 【发布时间】:2019-11-22 13:42:03 【问题描述】:如果我对itertools
"combinatoric iterators" doc 的理解正确,其想法是为每个常见的组合迭代提供一组标准函数。
但我今天错过了一个。我需要迭代每个 ordered 项的重复组合。
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 是否提供这样的迭代?为什么不,或者为什么我错过了它? 迭代这些的标准方法是什么? 我需要自己编写这个通用迭代器吗?
【问题讨论】:
您在寻找product('abcd', repeat=4)
吗?
我的意思是,在我看来,与替换的组合似乎给出了一个完全合理的顺序,只是不是你想要的那个?
@jonrsharpe 我是。我错过了 repeat
论点 :) 干杯!
@ParitoshSingh 它只为每个组合提供了一个订单,而我希望为每个组合提供所有可能的订单。
【参考方案1】:
总结一些 cmets,有(至少)两种方法可以做到这一点:
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'),
...
【讨论】:
以上是关于迭代列表的每个可能的 n 采样的主要内容,如果未能解决你的问题,请参考以下文章