【问题标题】:How to compare two lists to keep matching substrings?如何比较两个列表以保持匹配的子字符串?
【发布时间】:2018-11-02 18:03:31
【问题描述】:

尽我所能描述,我有两个字符串列表,我想返回列表 A 中包含列表 B 中任何字符串的所有结果。以下是详细信息:

A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
B = ['2000', '2001']

如何退货

C = ['dataFile2000', 'dataFile2001']?

我一直在研究列表推导,如下所示

C=[x for x in A if B in A] 

但我似乎无法让它工作。我在正确的轨道上吗?

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    你很亲密,使用any

    C=[x for x in A if any(b in x for b in B)]
    

    更详细:

    A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
    B = ['2000', '2001']
    
    C = [x for x in A if any(b in x for b in B)]
    
    print(C)
    

    输出

    ['dataFile2000', 'dataFile2001']
    

    【讨论】:

    • 太棒了,这就像一个魅力。感谢您的快速回复!
    【解决方案2】:

    您可以使用any() 检查列表B 中的任何元素是否在x 中:

    A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
    
    B = ['2000', '2001'] 
    
    c = [x for x in A if any(k in x for k in B)]
    
    print(c)
    

    输出:

    ['dataFile2000', 'dataFile2001']
    

    【讨论】:

      【解决方案3】:

      首先,我将为 O(1) 查找时间构造一个 set 年份。1

      >>> A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
      >>> B = ['2000', '2001']
      >>> 
      >>> years = set(B)
      

      现在,只保留A 中以years 结尾的元素。

      >>> [file for file in A if file[-4:] in years]
      >>> ['dataFile2000', 'dataFile2001']
      

      1 如果您的列表非常小(当然有两个元素符合条件),请保留这些列表。集合具有 O(1) 查找,但散列仍然会引入开销。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        相关资源
        最近更新 更多