检查列表项是否包含 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]

三叔

赞同来自:

例如,抛出它:例如,如果您需要匹配多行,例如
abc


def

, 您可以根据以下了解列表的两个理解:


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']

奔跑吧少年

赞同来自:

使用
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

.

龙天

赞同来自:

这是最短的方式:


if 'abc' in str/my_list/:

三叔

赞同来自:

这是一个相当古老的问题,但我建议这个答案,因为之前的答案不会应对列表中不是行的元素 /或一些迭代对象/. 此类元素会导致所有对列表的理解都失败了。

要优化列表中的此类元素,请跳过非成员元素,请使用以下内容:


[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']

/

测试 iterable 也许不是最好的。 从这里得到它:
https://coderoad.ru/1952464/

涵秋

赞同来自:

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

君笑尘

赞同来自:

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

诸葛浮云

赞同来自:

any/'abc' in item for item in mylist/

涵秋

赞同来自:

使用方法
__contains__//

条款。


a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
if i.__contains__/"abc"/ :
print/i, " is containing"/

三叔

赞同来自:

我是新的b。 python. 得到了下面的代码,易于理解


my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for str in my_list:
if 'abc' in str:
print/str/

小姐请别说爱

赞同来自:

mylist=['abc','def','ghi','abc']

pattern=re.compile/r'abc'/

pattern.findall/mylist/

石油百科

赞同来自:

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

for item in my_list:
if /item.find/'abc'// != -1:
print /'Found at ', item/

风见雨下

赞同来自:

我拍了一个搜索,要求您输入特定值,然后它将从包含输入的列表中查找值:


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

imp = raw_input/'Search item: '/

for items in my_list:
val = items
if any/imp in val for items in my_list/:
print/items/


尝试去找 'abc'.

龙天

赞同来自:

def find_dog/new_ls/:
splt = new_ls.split//
if 'dog' in splt:
print/"True"/
else:
print/'False'/


find_dog/"Is there a dog here?"/

八刀丁二

赞同来自:

我需要

索引列表

, 与符合符合如下:


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

[n for n, x in enumerate/lst/ if 'abc' in x]


出口


[0, 3]

诸葛浮云

赞同来自:

如果要获取几个子字符串的数据列表

你可以通过这种方式改变它


some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
# select element where "abc" or "ghi" is included
find_1 = "abc"
find_2 = "ghi"
result = [element for element in some_list if find_1 in element or find_2 in element]
# Output ['abc-123', 'ghi-789', 'abc-456']

郭文康

赞同来自:

问题:提供有关的信息 abc


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


aa = [ string for string in a if "abc" in string]
print/aa/

Output => ['abc-123', '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

更可读。

要回复问题请先登录注册