为了账号安全,请及时绑定邮箱和手机立即绑定

大型列表生成内存管理

大型列表生成内存管理

Helenr 2022-09-13 19:28:16
import itertoolsNum = 11base = list(range(1,Num+1))Permutations = list(itertools.permutations(base))我在尝试运行此命令时遇到内存错误。实际上,我只需要生成第1个(Num-1)!排列,但我不确定如何(所以如果Num = 7,我需要生成前6个! = 720个排列)。但是,理想情况下,我希望能够为明显更高的Num值生成排列,因此任何建议都很棒。
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

range()以及按需生成项目的返回生成器。您无需调用并将它们转换为列表。只需直接迭代它们并逐个访问项目即可。permutation()list()


num = 11

base = range(1, num+1)

permutations = itertools.permutations(base)


for permutation in permutations:

    # Do something with `permutation`.

(请注意,一个生成器只能使用一次。如果要多次迭代排列,则需要多次调用。itertools.permutations()


要在 n 个项目后停止,请使用 :itertools.islice()


for permutation in itertools.islice(permutations, n):

    # Do something with `permutation`.

您也可以在开始时跳过项目。这将跳过前五个排列:


for permutation in itertools.islice(permutations, 5, n):

    # Do something with `permutation`.

如果要计算排列,可以添加 ,它将索引附加到每个条目:enumerate()


for i, permutation in enumerate(itertools.islice(permutations, n)):

    # Skip the fifth permutation.

    if i == 4:

        continue


    # Do something with `permutation`.

顺便说一句,请使用小写字母作为变量名称。只有类名应大写。


查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信