我从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)
谢谢!
答案 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))