嵌套for循环,用于累积数字和打印名称

时间:2018-07-15 11:53:01

标签: python

我有2个列表,如下所示

names=['jon','adam','jessica','aaron']
nums=[1,5,7,9]

我正在编写一个嵌套的for循环,以获取如下所示的输出

jon starts from 5 to 6
adam starts from 6 to 11
jessica starts from 11 to 18
aaron starts from 18 to 27

我需要累积nums列表中的数字并将其添加到我给定的起始数字中,然后使用名称列表中的相应名称,前一个名称的结束编号应为下一个名称的起始编号,i编写了如下代码

names=['jon','adam','jessica','aaron']
nums=[1,5,7,9]
from itertools import accumulate
a= accumulate(nums)

for j in names:
    start = 5
    for i in a:
        starts=start+i
        print(j,"starts from",start, "to",starts)
        start=starts

这给了我以下输出

jon starts from 5 to 6
jon starts from 6 to 12
jon starts from 12 to 25
jon starts from 25 to 47

这里的名称显示不正确,数字也不正确,应该怎么做

2 个答案:

答案 0 :(得分:0)

您似乎正在使用嵌套的for循环,该循环将在每个数字旁边打印出每个人的名字...但事实并非如此。之所以没有这样做,是因为accumulate是一个迭代器,它在第一个循环之后到达末尾。因此,我决定将两者zip一起使用。我还使用了格式字符串(Python 3.6,如果无法使用格式字符串,请使用.format)。我还重命名了大多数变量。另外,我认为您似乎并没有真正使用accumulate来解决所有困惑。

names = ['jon','adam','jessica','aaron']
ages = [1,5,7,9]

start = 5
for name, age in zip(names, ages):
    end = start + age
    print(f"{name} starts from {start} to {end}")
    start = end

输出:

jon starts from 5 to 6
adam starts from 6 to 11
jessica starts from 11 to 18
aaron starts from 18 to 27

答案 1 :(得分:0)

我认为您可以使用enumerate来解决您的问题。 这是一个示例:

def accumulate(names, nums):
    start = 5
    for k, v in enumerate(names):
        s = start + nums[k]
        print(v, 'starts from ', start, 'to', s)
        start = s

names=['jon','adam','jessica','aaron']
nums=[1,5,7,9]

accumulate(names, nums)

输出:

jon starts from  5 to 6
adam starts from  6 to 11
jessica starts from  11 to 18
aaron starts from  18 to 27

PS:nums的长度必须小于或等于names的长度,否则会出现异常。