Python 如何在不清空列表的情况下将同一列表打印两次?
我正在练习使用带有一些循环和ifs的Python 如何在不清空列表的情况下将同一列表打印两次?,python,list,itertools,Python,List,Itertools,我正在练习使用带有一些循环和ifs的itertool.accumulate函数。作为结果,我想要一个单个数字的列表(变量称为“calls”)和每个周期的总和,即3 现在,我已经设法得到了两个列表,但不是同时得到的。我的意思是,列表一旦打印出来,就会变成空的。我错过什么了吗?如何打印这两个列表 我将发布两个带有输出的代码,向您展示我的意思 第一个代码:仅打印单个值 import random as rnd import itertools # variables a = 5 b = int(1)
itertool.accumulate
函数。作为结果,我想要一个单个数字的列表(变量称为“calls”)和每个周期的总和,即3
现在,我已经设法得到了两个列表,但不是同时得到的。我的意思是,列表一旦打印出来,就会变成空的。我错过什么了吗?如何打印这两个列表
我将发布两个带有输出的代码,向您展示我的意思
第一个代码:仅打印单个值
import random as rnd
import itertools
# variables
a = 5
b = int(1)
########
calls = (
tuple((itertools.accumulate(
a if a > rnd.randint(1, 10) else -a
for i in range(b)
for j in range(2))
)
)
for cycle in range(3)
)
#######
print(list(calls))
print(list(sum(call) for call in calls))
[(5,0),(-5,-10),(5,0)]
[]
第二个代码:它只打印值的总和
作为rnd导入随机数据
进口itertools
# variables
a = 5
b = int(1)
########
calls = (
tuple((itertools.accumulate(
a if a > rnd.randint(1, 10) else -a
for i in range(b)
for j in range(2))
)
)
for cycle in range(3)
)
#######
print(list(sum(call) for call in calls)
print(list(calls))
[5,-15,5]
[]
最简单的解决方案:直接将其转换为
列表
:
calls = list( # only changed here
tuple((itertools.accumulate(
a if a > rnd.randint(1, 10) else -a
for i in range(b)
for j in range(2))
)
)
for cycle in range(3)
)
问题在于,您在使用时创建了一个:
(... for cycle in range(3))
生成器表达式不能重用,它们用于延迟一次性计算
您也可以使用列表来代替(…)
:
最简单的解决方案:直接将其转换为
列表
:
calls = list( # only changed here
tuple((itertools.accumulate(
a if a > rnd.randint(1, 10) else -a
for i in range(b)
for j in range(2))
)
)
for cycle in range(3)
)
问题在于,您在使用时创建了一个:
(... for cycle in range(3))
生成器表达式不能重用,它们用于延迟一次性计算
您也可以使用列表来代替(…)
: