#python #list #list-comprehension
#питон #Список #список-понимание
Вопрос:
Мне нужны два списка. Один список, в котором указаны все тикеры за день, и один список, в котором указаны все тикеры за день.
Дано:
stocks = [{'ticker':'IBM', 'open': 139.50, 'close': 125.32}, {'ticker':'NIO', 'open': 43.80, 'close': 40.30}, {'ticker':'WMT', 'open': 134.80, 'close': 130.23}, {'ticker':'GE', 'open': 10.13, 'close': 10.50}]
Я попробовал следующее; и это работает; однако, есть ли лучший способ?
stocks_down_list = [stocks[x]['ticker'] for x in range(len(stocks)) if stocks[x]['close'] -stocks[x]['open'] lt; 0] stocks_up_list = [stocks[x]['ticker'] for x in range(len(stocks)) if stocks[x]['close'] - stocks[x]['open'] gt; 0]
Ответ №1:
Что является «лучшим» способом, безусловно, можно было бы оставить открытым для интерпретации, однако, чтобы уменьшить временную сложность, вы определенно могли бы рассмотреть возможность повторения списка акций один раз, а не дважды, чтобы построить каждый list
отдельно с помощью подхода понимания.
Например:
stocks = [{'ticker': 'IBM', 'open': 139.50, 'close': 125.32}, {'ticker': 'NIO', 'open': 43.80, 'close': 40.30}, {'ticker': 'WMT', 'open': 134.80, 'close': 130.23}, {'ticker': 'GE', 'open': 10.13, 'close': 10.50}] stocks_up_list = [] stocks_down_list = [] for stock in stocks: ticker = stock['ticker'] if stock['close'] gt;= stock['open']: stocks_up_list.append(ticker) else: stocks_down_list.append(ticker)
Ответ №2:
Вы можете использовать приведенный ниже код только для повторного просмотра списка акций один и более кратких
for stock in stocks: (stocks_up_list, stocks_down_list)[stock['close'] lt; stock['open']].append(stock)
Комментарии:
1. Это довольно умно. Мне потребовалось некоторое время, чтобы понять, как это работает; но в основном у вас есть кортеж из 2 элементов, который действует как ссылка на списки, и
bool
условие позволяет вам «выбрать», к какому списку вы хотите добавить. То есть, когда условиеTrue
выполнено , оно будет добавлено ко второму спискуstocks_down_list
, поскольку bool является подклассом int, а значение True совпадает со значением int 1. Опять же, довольно умно.