Создайте список элементов и суммируйте его - PullRequest
0 голосов
/ 30 января 2020

Я начинаю с Python и мне нужно вычислить P & L портфеля, состоящего из действий и их начальной цены. У меня есть список с фактическими рыночными ценами.

На самом деле я хочу суммировать все элементы, которые есть в моей функции 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 ]

1 голос
/ 30 января 2020

вам просто нужно определить список pnl перед вашим for l oop, чем просто добавить каждый элемент, вычисленный в for l oop, в конце вы можете суммировать элементы списка:

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

0 голосов
/ 30 января 2020

Вам необходимо сохранить промежуточный итог, например:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...