我有一个数据集,我试图循环并过滤我正在寻找的“交换”。我试过 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 & 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']
答案 0 :(得分:3)
您的原始代码的问题在于,内置的 any
函数旨在采用一系列布尔值,如果其中任何一个为 True,则返回 True,但您向它传递了一个交换列表。
相反,您应该检查数据中是否存在每个交换,并使用 any
来确定这对于一个或多个交换是否为 True:
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()
,假设顶部的交换列表全部为大写。