我有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
这里的名称显示不正确,数字也不正确,应该怎么做
答案 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
的长度,否则会出现异常。