【问题标题】:Filtering a list of strings based on contents根据内容过滤字符串列表
【发布时间】:2011-01-10 07:23:08
【问题描述】:

给定列表['a','ab','abc','bac'],我想计算一个包含'ab' 字符串的列表。 IE。结果是['ab','abc']。这如何在 Python 中完成?

【问题讨论】:

    标签: python list


    【解决方案1】:

    这种简单的过滤可以通过 Python 以多种方式实现。最好的方法是使用“列表推导”,如下所示:

    >>> lst = ['a', 'ab', 'abc', 'bac']
    >>> [k for k in lst if 'ab' in k]
    ['ab', 'abc']
    

    另一种方法是使用filter 函数。在 Python 2 中:

    >>> filter(lambda k: 'ab' in k, lst)
    ['ab', 'abc']
    

    在 Python 3 中,它返回 iterator 而不是列表,但您可以强制转换它:

    >>> list(filter(lambda k: 'ab' in k, lst))
    ['ab', 'abc']
    

    虽然使用理解是更好的做法。

    【讨论】:

    • @S.Lott:为什么?在合适的环境中学习有用的高级编程主题有什么问题?
    • @S.Lott:我认为 lambda 有助于将函数视为一流的对象,这对于某些编程范式很重要。我不会说它们对我来说非常重要,但我相信即使是新手也可以从以这种方式思考编程中受益,并且绝对不会称之为造成
    • @S.Lott:但在这种情况下,lambda 不是 filter 的完美伴侣吗?我认为编写一个单独的函数来检查ab 是否在给定的列表中是一种矫枉过正的做法。编写一个更通用的函数也是如此,它基本上包装了in 运算符。如果没有lambda,您将如何更清晰地使用filter
    • 找到这个答案的不仅仅是 n00bs
    • 我是一个 n00b,现在我被介绍给 lambda。知道它的感觉真棒。现在我将进一步了解它。
    【解决方案2】:
    [x for x in L if 'ab' in x]
    

    【讨论】:

      【解决方案3】:
      # To support matches from the beginning, not any matches:
      
      items = ['a', 'ab', 'abc', 'bac']
      prefix = 'ab'
      
      filter(lambda x: x.startswith(prefix), items)
      

      【讨论】:

      • 避免列表作为变量名,因为这是一个python对象类型。
      【解决方案4】:

      在交互式 shell 中快速尝试:

      >>> l = ['a', 'ab', 'abc', 'bac']
      >>> [x for x in l if 'ab' in x]
      ['ab', 'abc']
      >>>
      

      为什么会这样?因为in operator 是为字符串定义的,意思是:“是子字符串”。

      另外,您可能需要考虑写出循环而不是使用上面使用的list comprehension syntax

      l = ['a', 'ab', 'abc', 'bac']
      result = []
      for s in l:
         if 'ab' in s:
             result.append(s)
      

      【讨论】:

        【解决方案5】:
        mylist = ['a', 'ab', 'abc']
        assert 'ab' in mylist
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-14
          • 2016-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-05
          • 1970-01-01
          相关资源
          最近更新 更多