检查Python列表项是否在另一个字符串中包含一个字符串

我有一个清单:

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

并要搜索包含字符串'abc' 。 我怎样才能做到这一点?

if 'abc' in my_list:

会检查列表中是否存在'abc' ,但它是'abc-123''abc-456' ,因此'abc'不存在。 那么,如何获取所有包含'abc'


#1楼

只是把它扔在那里:如果您碰巧需要匹配多个字符串,例如abcdef ,则可以按如下方式组合两种理解:

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

#2楼

据我所知,“ 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语句更具可读性。


#3楼

如果您只想知道'abc'是否在其中一项中,这是最短的方法:

if 'abc' in str(my_list):

#4楼

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

#5楼

如果您只想检查列表中任何字符串中是否存在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楼

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

#7楼

使用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类型。


#8楼

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

#9楼

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

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

#10楼

我是Python的新手。 我得到了下面的代码,使其易于理解:

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

#11楼

问题:提供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']

#12楼

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

pattern=re.compile(r'abc') 

pattern.findall(mylist)

#13楼

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

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”。


#14楼

使用Python字符串类的__contains__()方法:

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

#15楼

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?")

#16楼

这是一个很老的问题,但是我提供了这个答案,因为先前的答案不能解决列表中不是字符串(或某种可迭代对象)的项。 这些项目将导致整个列表理解失败,并发生异常。

要通过跳过不可迭代的项目来优雅地处理列表中的此类项目,请使用以下命令:

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

可迭代的测试可能不是最好的。 从这里得到它: 在Python中,如何确定对象是否可迭代?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值