Python 创建元素列表并求和

Python 创建元素列表并求和,python,python-3.x,list,sum,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

我从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)

谢谢大家!

您需要保持一个运行总数,如下所示:

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))

您只需在
for
循环之前定义
pnl
列表,而不仅仅是附加在
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.49999999943

如果不想将每个
pnl
值保留在列表中:

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

print(pnl)
输出:

-
174.49999999943

如果您想要一行,可以使用:

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


-
174.49999999943

将表格添加到您要分配给
pnl
的代码中4次,而不是添加到其中。首先,创建
pnl=0
,然后在每个循环迭代调用中
pnl+=portfolio[i][0]*…
谢谢,太棒了!