创建元素列表并将其求和

时间:2020-01-29 21:34:52

标签: python python-3.x list sum

我从Python开始,需要计算由操作及其初始价格组成的投资组合的损益。我还列出了市场的实际价格。

实际上,我想对我在pnl函数中拥有的所有元素求和,但这不起作用,尽管它是一个列表,关于我可以做什么的任何想法?

这是我的代码:

aapl = [ 10, 154.12 ]
goog = [  2, 812.56 ]
tsla = [ 12, 342.12 ]
fb   = [ 18, 209.0  ]

portfolio = [aapl, goog, tsla, fb]

market = [ 198.84, 1217.93, 267.66, 179.06 ]

sum(market)


for i in range(0,4):
    pnl = portfolio[i][0] * (market[i] - portfolio[i][1])
print(pnl)

type(pnl)

谢谢!

2 个答案:

答案 0 :(得分:1)

您只需要在pnl循环之前定义for列表,而不仅仅是附加在for循环中计算出的每个项目,最后您可以对列表元素求和:

aapl = [ 10, 154.12 ]
goog = [  2, 812.56 ]
tsla = [ 12, 342.12 ]
fb   = [ 18, 209.0  ]

portfolio = [ aapl, goog, tsla, fb ]

market = [ 198.84, 1217.93, 267.66, 179.06 ]

sum(market)

pnl = []
for i in range(0,4):
    pnl.append(portfolio[i][0]*(market[i]-portfolio[i][1]))

print(sum(pnl))

输出:

-174.49999999999943

如果您不希望将每个pnl值都保留在列表中:

pnl = 0
for i in range(0,4):
    pnl += portfolio[i][0]*(market[i]-portfolio[i][1])

print(pnl)

输出:

-174.49999999999943

如果需要一行,可以使用:

sum(p0 * (m - p1) for [p0, p1], m in zip(portfolio, market))

输出:

-174.49999999999943

答案 1 :(得分:0)

您需要保持总计,像这样:

profit = 0
for (shares, init_price), market_price in zip(portfolio, market):
    profit += shares * (market_price - init_price)
print(profit)

或者您可以在列表理解中使用sum

profit = sum(shares * (market_price - init_price)
    for (shares, init_price), market_price
    in zip(portfolio, market))