早上好,
我在下面建了两个列表:
Years = [1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985]
Amount = [100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400]
price = 0
for item in Years:
i = 0
while Years[i] <= item:
price += Amount[i]
i += i
print(item,price)
如何进行此打印,使其仅打印年份和相应的总金额?
它应该打印: 1982年300
我在这里错过了什么吗?
答案 0 :(得分:2)
我个人会使用dictionary结构,并使用zip同时迭代这两个列表:
years = [1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985]
amount = [100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400]
results = {}
for y, a in zip(years,amount):
if y in results:
results[y] += a
else:
results[y] = a
for year, total in results.items():
print(str(year) + ": " + str(total))
通过这种方式,您可以轻松访问每年,并通过results[year]
获取相应金额来获取金额。
我还将Years
和Amounts
重命名为years
和amounts
,因为在Python中对变量使用小写的第一个字母是常规。
为了避免测试以查看某个键是否在results
字典(if语句)中,您还可以使用defaultdict结构:
import collections
years = [1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985]
amount = [100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400]
results = collections.defaultdict(int)
for y, a in zip(years,amount):
results[y] += (a)
for year, total in results.items():
print(str(year) + ": " + str(total))
答案 1 :(得分:0)
您可以使用enumerate获取正在迭代的列表的索引。
for ind, item in enumerate(Years):
print(item, sum(Amount[:ind+1]))
sum函数采用列表a返回其总和。要使价格达到当前年度,您可以使用list splicing访问相关的列表项。
答案 2 :(得分:0)
我希望我能正确理解你。在这里,我创建一个应该更容易理解的代码
Years = [1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985, 1982, 1983, 1984, 1985]
Amount = [100, 200, 300, 400, 100, 200, 300, 400, 100, 200, 300, 400]
price = 0
for i in range(len(Years)):
print(str(Years[i]) + ' ' + str(Amount[i]))
这将为您提供以下输出:
1982 100
1983 200
1984 300
1985 400
1982 100
1983 200
1984 300
1985 400
1982 100
1983 200
1984 300
1985 400
答案 3 :(得分:0)
您可以使用 zip 功能:
for a,b in zip(Years, Amount):
print(a, b)
使用 zip 功能的更简洁(优雅?)方式是:
{{1}}