这是Codeforce的1352C问题,我正在使用Python 3.x来解决它,所以内存是一个问题。
finl = []
for i in range(n):
div, no = map(int, input().split())
lis = [j for j in range(no*div) if j%div != 0]
finl.append(str(lis[no-1]))
print("\n".join(finl))
到目前为止,这是我的代码。我用每个案例,列出所有不能被所讨论的数字整除的数字,这里是div
,no
是第n个数字,这是必要的输出。这是一种简单的方法,可以理解的是,我仅在第一组数字中就达到了内存限制。
我这里的问题是:我如何才能放弃创建一个完整的列表(从而浪费内存),而只是将我需要的输出( no
th条目)保存到finl
列表(我创建的输出列表,最后打印出来)?我现在想坚持使用这种方法,但我找不到类似的答案(没有查看问题的解决方案,因此跳过了部分问题解决过程)
发布于 2021-07-15 05:42:17
不必预先创建整个列表,然后获取片段,而是创建生成器并使用next
为给定的no
提取条目
for i in range(n):
div, no = map(int, input().split())
gen = (j for j in range(no*div) if j%div != 0)
lis = [next(gen) for _ in range(no)]
finl.append(str(lis))
PS:它可能会抛出StopIterationError
如果no
大于生成器可以yield
的项数,你可能想要处理它,如果是这样的话。
https://stackoverflow.com/questions/68388253
复制