【问题标题】:Checking if a series of lists contain items检查一系列列表是否包含项目
【发布时间】:2021-05-29 15:12:11
【问题描述】:

我有一个数据集,我试图循环并筛选出我正在寻找的“交换”。我试过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']

【问题讨论】:

  • 您只对精确的、区分大小写的匹配感兴趣吗?部分匹配(例如NYSE ARCANASDAQ TEST STOCK)呢?

标签: python list stock


【解决方案1】:

您的原始代码的问题在于,内置的 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(),假设顶部的交换列表全部为大写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2018-01-18
    • 2023-03-26
    • 1970-01-01
    • 2020-04-02
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多