我有一个清单:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
并要搜索包含字符串'abc'
。 我怎样才能做到这一点?
if 'abc' in my_list:
会检查列表中是否存在'abc'
,但它是'abc-123'
和'abc-456'
,因此'abc'
不存在。 那么,如何获取所有包含'abc'
?
#1楼
只是把它扔在那里:如果您碰巧需要匹配多个字符串,例如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']
#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中,如何确定对象是否可迭代?