Check if a Python list item contains a string inside another string
我有一个清单:
1 | my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] |
并希望搜索包含字符串
1 | if 'abc' in my_list: |
会检查列表中是否存在
如果您只想检查列表中任何字符串中是否存在
1 2 3 | some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] if any("abc" in s for s in some_list): # whatever |
如果您真的想得到包含
1 | matching = [s for s in some_list if"abc" in s] |
使用
1 2 3 | >>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] >>> print filter(lambda x: 'abc' in x, lst) ['abc-123', 'abc-456'] |
您还可以使用列表理解。
1 | >>> [x for x in lst if 'abc' in x] |
顺便说一下,不要使用
把这个扔到一边:如果你恰好需要匹配多个字符串,例如
1 2 | matchers = ['abc','def'] matching = [s for s in my_list if any(xs in s for xs in matchers)] |
输出:
1 | ['abc-123', 'def-456', 'abc-456'] |
这是最短的路:
1 | if 'abc' in str(my_list): |
这是一个很古老的问题,但我给出这个答案是因为前面的答案不适用于列表中不是字符串(或某种不可重复的对象)的项目。这样的项目会导致整个列表理解失败,并出现异常。
要优雅地处理列表中的这些项目,请跳过不可重复的项目,请使用以下选项:
1 | [el for el in lst if isinstance(el, collections.Iterable) and (st in el)] |
然后,用这样一个列表:
1 2 | lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123] st = 'abc' |
您仍然可以得到匹配的项目(
对Iterable的测试可能不是最好的。从这里开始:在Python中,如何确定对象是否是不可访问的?
1 2 3 | for item in my_list: if item.find("abc") != -1: print item |
1 2 3 | x = 'aaa' L = ['aaa-12', 'bbbaaa', 'cccaa'] res = [y for y in L if x in y] |
1 | any('abc' in item for item in mylist) |
使用字符串的
1 2 3 4 | a = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for i in a: if i.__contains__("abc") : print(i," is containing") |
我是Python的新手。下面的代码工作起来很容易理解
1 2 3 4 | my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for str in my_list: if 'abc' in str: print(str) |
我做了一个搜索,它要求您输入一个特定的值,然后它将从包含您输入的列表中查找一个值:
1 2 3 4 5 6 7 8 9 10 11 12 | 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"。
1 2 3 4 5 | mylist=['abc','def','ghi','abc'] pattern=re.compile(r'abc') pattern.findall(mylist) |
1 2 3 4 5 | my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for item in my_list: if (item.find('abc')) != -1: print ('Found at ', item) |
问题:提供ABC的信息
1 2 3 4 5 6 7 | 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"语句的字符串中搜索子字符串要快一点。
1 2 3 4 5 6 7 | 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 |
但是,我同意