【发布时间】:2021-11-22 16:25:49
【问题描述】:
我想置换每个元素的集合.. 但是,对于集合中的每个元素。我想限制它的重复次数。
这里有一段代码可以理解:
_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 来实现这一点,因为它使用了大量内存。
【问题讨论】:
-
itertools不使用大量内存。如果您将迭代器转换为列表,那么它当然会使用内存,您想出的任何解决方案都将如此。 -
不,这个解决方案没有,itertools 一次将所有组合放入一个列表中,而这个解决方案只适用于一个列表并每次都打印出来
-
itertools不会将所有组合放入一个列表中。它产生一个迭代器。由您决定是逐个使用它们还是将它们转换为列表。 -
OOwwh,等等,我刚刚尝试了 itertools,我一直将它们放入列表中????
标签: python permutation large-data