根据内容过滤字符串列表

Chr*_*Jie 75 python list

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

Eli*_*sky 124

使用Python可以通过多种方式实现这种简单的过滤.最好的方法是使用"列表推导"如下:

>>> lst = ['a', 'ab', 'abc', 'bac']
>>> res = [k for k in lst if 'ab' in k]
>>> res
['ab', 'abc']
>>> 
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用该filter功能:

>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
>>> 
Run Code Online (Sandbox Code Playgroud)

  • @ S.Lott:为什么?在合适的环境中学习有用的高级编程主题有什么问题? (28认同)
  • @ S.Lott:我认为lambdas正在促进将函数作为第一类对象的考虑,这对于某些编程范例很重要.我不会说它们对我来说非常重要*,但我相信即使是新手也可以从这种方式进行编程中获益,并且绝对不会称它为*造成*. (10认同)
  • 我是n00b,现在我被介绍给lambda.感觉很棒,知道它.现在我将了解更多相关信息. (7认同)
  • @ S.Lott:但在这种情况下,"lambda"不是"过滤器"的完美伴侣吗?我认为编写一个单独的函数只是为了检查给定列表中是否有'ab`是一种矫枉过正.所以写一个更通用的函数,基本上包装`in`运算符.如果没有`lambda`,你会如何以更清晰的方式使用`filter`? (6认同)
  • 找到这个答案不仅仅是n00bs (4认同)
  • 我必须用list()函数将过滤器包围起来才能返回列表,否则会得到过滤器对象。不知道这是否是由于python版本(我使用3.5) (2认同)

Ita*_*man 11

# To support matches from the beginning, not any matches:

items = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'

filter(lambda x: x.startswith(prefix), items)
Run Code Online (Sandbox Code Playgroud)

  • 避免将 list 作为变量名,因为这是 python 对象类型。 (4认同)

Dar*_*mas 7

在交互式 shell 中快速尝试了这一点:

>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
Run Code Online (Sandbox Code Playgroud)

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

此外,您可能需要考虑写出循环,而不是使用上面使用的列表理解语法

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