检查一系列列表是否包含项目

时间:2021-05-29 15:12:11

标签: 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 & 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 个答案:

答案 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(),假设顶部的交换列表全部为大写。