Python 如何在不清空列表的情况下将同一列表打印两次?

Python 如何在不清空列表的情况下将同一列表打印两次?,python,list,itertools,Python,List,Itertools,我正在练习使用带有一些循环和ifs的itertool.accumulate函数。作为结果,我想要一个单个数字的列表(变量称为“calls”)和每个周期的总和,即3 现在,我已经设法得到了两个列表,但不是同时得到的。我的意思是,列表一旦打印出来,就会变成空的。我错过什么了吗?如何打印这两个列表 我将发布两个带有输出的代码,向您展示我的意思 第一个代码:仅打印单个值 import random as rnd import itertools # variables a = 5 b = int(1)

我正在练习使用带有一些循环和ifs的
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))
生成器表达式不能重用,它们用于延迟一次性计算

您也可以使用列表来代替
(…)