检查Python列表项包含另一个字符串

问题描述:

内的字符串我有一个列表:检查Python列表项包含另一个字符串

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] 

,并希望搜索包含字符串'abc'项目。我怎样才能做到这一点?

if 'abc' in my_list: 

会检查是否存在在列表中'abc'但它的'abc-123''abc-456'的一部分,'abc'并不单独存在。那么如何获得包含'abc'的所有物品?

+11

要检查相反的(如果一个字符串包含多个字符串中的一个):http://*.com/a/6531704/2436175 – Antonio 2014-11-18 10:48:40

如果你只是要检查的abc在列表中的任何字符串的存在,你可以尝试

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] 
if any("abc" in s for s in some_list): 
    # whatever 

如果你真的想要得到包含abc所有项目,使用

matching = [s for s in some_list if "abc" in s] 
+0

我要检查是否一个项目是由6个元素组成的数组。如果“如果”做得更快或是否一样? – 2013-03-10 00:11:39

+19

@OlivierPons,只要`myitem in myarray:` – alldayremix 2013-03-21 15:26:10

+5

另一种获取所有包含子字符串'abc'的字符串的方法:`filter(元素中的lambda元素:'abc',some_list)` – hangtwenty 2013-05-31 20:10:24

x = 'aaa' 
L = ['aaa-12', 'bbbaaa', 'cccaa'] 
res = [y for y in L if x in y] 

any('abc' in item for item in mylist) 

使用filter获得在该具备的要素abc

>>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] 
>>> print filter(lambda x: 'abc' in x, lst) 
['abc-123', 'abc-456'] 

您还可以使用列表理解。

>>> [x for x in lst if 'abc' in x] 

顺便说一句,不要用这个词list作为变量名,因为它已被用于list类型。

for item in my_list: 
    if item.find("abc") != -1: 
     print item 

这是一个很老的问题,但我提供这个答案,因为以前的答案并不在列表中不串(或某种迭代的对象)的项目应付。这些项目会导致整个列表理解失败,并有例外。

跳过非迭代的项目与列表中这样的项目要优雅地处理,使用以下命令:

[el for el in lst if isinstance(el, collections.Iterable) and (st in el)] 

那么,这样的名单:

lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123] 
st = 'abc' 

你仍然会得到匹配项(['abc-123', 'abc-456']

可迭代的测试可能不是最好的。从这里得到它:In Python, how do I determine if an object is iterable?

就扔了这一点还有:如果你碰巧需要来匹配多个字符串,例如abcdef,你可以把组合两个list解析如下:

matchers = ['abc','def'] 
matching = [s for s in my_list if any(xs in s for xs in matchers)] 

输出:

['abc-123', 'def-456', 'abc-456'] 

从我的知识,在 'For' 语句总是消耗时间。

当列表长度增长时,执行时间也会增加。

我认为,用'is'语句在字符串中搜索子字符串要快一点。

In [1]: t = ["abc_%s" % number for number in range(10000)] 

In [2]: %timeit any("9999" in string for string in t) 
1000 loops, best of 3: 420 µs per loop 

In [3]: %timeit "9999" in ",".join(t) 
10000 loops, best of 3: 103 µs per loop 

但是,我同意any语句更具可读性。

这是最简单的办法:

if 'abc' in str(my_list):