元素添加

时间:2016-10-30 20:10:56

标签: python

早上好,

我在下面建了两个列表:

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

我在这里错过了什么吗?

4 个答案:

答案 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]获取相应金额来获取金额。

我还将YearsAmounts重命名为yearsamounts,因为在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}}