[英]Permutation with Limiting
我想對每個元素進行排列。但是,對於集合中的每個元素。 我想限制它重復的次數。
這是一段代碼以供理解:
_list_ = [0,1,3]
limit_dict = {
0 : [0, 1],
1 : [0, 3],
3 : [0, 1]
}
def main(position=0, length=5, genlist=[]):
if position == length:
print (genlist)
else:
for element in _list_:
if limit_dict[element][0] != limit_dict[element][1]:
limit_dict[element][0] += 1
main(position + 1, length, genlist + [element])
limit_dict[element][0] -= 1
main()
這是一般的想法,有沒有更快的方法來實現這個?
我想為大量整數做這樣的事情,因此不能使用 itertools 來實現這一點,因為它使用了很多 memory。
這就是more-itertools中的distinct_permutations
所做的。
from more_itertools import distinct_permutations
limit_dict = {
0 : [0, 1],
1 : [0, 3],
3 : [0, 1]
}
elements = (k for k, v in limit_dict.items() for _ in range(*v))
for permutation in distinct_permutations(elements):
print(permutation)
Output:
(0, 1, 1, 1, 3)
(0, 1, 1, 3, 1)
(0, 1, 3, 1, 1)
(0, 3, 1, 1, 1)
(1, 0, 1, 1, 3)
(1, 0, 1, 3, 1)
(1, 0, 3, 1, 1)
(1, 1, 0, 1, 3)
(1, 1, 0, 3, 1)
(1, 1, 1, 0, 3)
(1, 1, 1, 3, 0)
(1, 1, 3, 0, 1)
(1, 1, 3, 1, 0)
(1, 3, 0, 1, 1)
(1, 3, 1, 0, 1)
(1, 3, 1, 1, 0)
(3, 0, 1, 1, 1)
(3, 1, 0, 1, 1)
(3, 1, 1, 0, 1)
(3, 1, 1, 1, 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.