#python #list #stock
Вопрос:
У меня есть набор данных, который я пытаюсь просмотреть и отфильтровать только для «обменов», которые я ищу. Я пробовал any()
, но, похоже, это не работает. Может кто-нибудь, пожалуйста, сообщить мне, что я делаю неправильно?
Мой желаемый результат-это список, содержащий "NASDAQ"
или "NYSE"
.
exchanges = ['NASDAQ', 'NYSE']
for i in ticker_csv:
if any(exchanges) in i:
print(i)
Это ничего не печатает, так как мои условия не были выполнены.
Вот образец данных внутри ticker_csv
.
['ZVZZC', 'ZVZZC', 'NASDAQ', 'Stock', '2016-01-29', 'null', 'Active']
['ZVZZT', 'NASDAQ TEST STOCK', 'Bats', 'Stock', '2017-09-22', 'null', 'Active']
['ZWRK', 'Z-Work Acquisition Corp - Class A', 'NASDAQ', 'Stock', '2021-04-05', 'null', 'Active']
['ZWRKU', 'Z-Work Acquisition Corp - Units (1 Ord Class A amp; 1/3 War)', 'NASDAQ', 'Stock', '2021-01-29', 'null', 'Active']
['ZWRKW', 'Z-Work Acquisition Corp - Warrants (29/01/2026)', 'NASDAQ', 'Stock', '2021-03-24', 'null', 'Active']
['ZWZZT', 'NASDAQ TEST STOCK', 'W', 'Stock', '2017-09-22', 'null', 'Active']
['ZXYZ-A', 'NASDAQ SYMBOLOGY TEST', 'NASDAQ', 'Stock', '2016-01-19', 'null', 'Active']
['ZXZZT', 'NASDAQ TEST STOCK', 'Bats', 'Stock', '2006-07-10', 'null', 'Active']
['ZY', 'Zymergen Inc', 'Bats', 'Stock', '2021-04-22', 'null', 'Active']
['ZYME', 'Zymeworks Inc', 'MKT', 'Stock', '2017-04-28', 'null', 'Active']
['ZYNE', 'Zynerba Pharmaceuticals Inc', 'bats', 'Stock', '2015-08-05', 'null', 'Active']
['ZYXI', 'Zynex Inc', 'NASDAQ', 'Stock', '2002-12-31', 'null', 'Active']
['ZZK', '', 'NYSE ARCA', 'Stock', '2020-07-22', 'null', 'Active']
['ZZZ', 'TEST TICKER FOR UTP', 'NYSE ARCA', 'Stock', '2014-10-31', 'null', 'Active']
Комментарии:
1. Вас интересуют только точные совпадения с учетом регистра? Как насчет частичных совпадений (например
NYSE ARCA
,NASDAQ TEST STOCK
)?
Ответ №1:
Проблема с вашим исходным кодом заключается в том, что встроенная any
функция предназначена для того, чтобы принимать последовательность логических значений и возвращать значение True, если какое-либо из них является истинным, но вы передали ей список обменов.
Вместо этого вы должны проверить, присутствует ли каждый обмен в данных, и использовать any
его, чтобы выяснить, верно ли это для одного или нескольких обменов:
for data in ticker_csv:
if any(exchange in data for exchange in exchanges):
print(data)
Здесь data
приведен список, содержащий несколько полей: символ тикера, полное имя, биржа и т.д.
Лучший подход состоит в том, чтобы отметить, что биржа всегда является третьим элементом списка (индекс 2). Так что вы можете сделать что-то вроде этого:
for data in ticket_csv:
exchange = data[2]
if exchange in exchanges:
print(data)
Более сжатая версия выполняет эту фильтрацию с помощью встроенной filter
функции:
for data in filter(lambda data: data[2] in exchanges, ticker_csv):
print(data)
Вы также можете использовать data[2].upper()
, если вам нужно провести сравнение без учета регистра, предполагая, что ваш список обменов вверху полностью прописан.