我有一个清单:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
并想要搜索包含字符串'abc'
的项目。我怎么能这样做?
if 'abc' in my_list:
会检查列表中是否存在'abc'
,但它是'abc-123'
和'abc-456'
的一部分,'abc'
本身不存在。那么如何获取包含'abc'
的所有项目?
答案 0 :(得分:761)
如果您只想检查列表中任何字符串中是否存在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]
答案 1 :(得分:73)
使用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
类型。
答案 2 :(得分:68)
只是抛弃它:如果您碰巧需要匹配多个字符串,例如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']
答案 3 :(得分:36)
这是最短的方式:
*T
答案 4 :(得分:18)
这是一个相当古老的问题,但我提供了这个答案,因为之前的答案不能处理列表中不是字符串(或某种可迭代对象)的项目。这些项目会导致整个列表理解失败并出现异常。
要通过跳过不可迭代的项目来优雅地处理列表中的此类项目,请使用以下内容:
[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?
答案 5 :(得分:11)
for item in my_list:
if item.find("abc") != -1:
print item
答案 6 :(得分:10)
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
答案 7 :(得分:5)
any('abc' in item for item in mylist)
答案 8 :(得分:1)
如果要获取多个子字符串的数据列表
您可以通过这种方式更改
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']
答案 9 :(得分:1)
我是python的新手。下面的代码工作且易于理解
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for str in my_list:
if 'abc' in str:
print(str)
答案 10 :(得分:1)
使用__contains__()
字符串方法。
a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
if i.__contains__("abc") :
print(i, " is containing")
答案 11 :(得分:0)
将 nan 添加到列表中,以下对我有用:
{
"status": 0,
"message": "ok",
"data": {
"msisdn": "081327255200"
}
}
答案 12 :(得分:0)
我需要与匹配项相对应的列表索引:
lst=['abc-123', 'def-456', 'ghi-789', 'abc-456']
[n for n, x in enumerate(lst) if 'abc' in x]
输出
[0, 3]
答案 13 :(得分:0)
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?")
答案 14 :(得分:0)
我进行了搜索,要求您输入一个特定值,然后它将从包含您输入内容的列表中寻找一个值:
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”。
答案 15 :(得分:0)
mylist=['abc','def','ghi','abc']
pattern=re.compile(r'abc')
pattern.findall(mylist)
答案 16 :(得分:0)
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
if (item.find('abc')) != -1:
print ('Found at ', item)
答案 17 :(得分:-1)
问题:提供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']
答案 18 :(得分:-1)
据我所知,'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
语句更具可读性。