检查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'
的所有物品?
如果你只是要检查的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]
我要检查是否一个项目是由6个元素组成的数组。如果“如果”做得更快或是否一样? – 2013-03-10 00:11:39
@OlivierPons,只要`myitem in myarray:` – alldayremix 2013-03-21 15:26:10
另一种获取所有包含子字符串'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?
就扔了这一点还有:如果你碰巧需要来匹配多个字符串,例如abc
和def
,你可以把组合两个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):
要检查相反的(如果一个字符串包含多个字符串中的一个):http://*.com/a/6531704/2436175 – Antonio 2014-11-18 10:48:40