检查Python列表项是否在另一个字符串中包含字符串
我有一份清单:检查Python列表项是否在另一个字符串中包含字符串,python,string,Python,String,我有一份清单: my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] 并希望搜索包含字符串'abc'的项目。我该怎么做 if 'abc' in my_list: 将检查列表中是否存在'abc',但它是'abc-123'和'abc-456'的一部分,'abc'本身不存在。因此,如何获取包含'abc'的所有项目?如果您只想检查列表中任何字符串中是否存在abc,可以尝试 x = 'aaa' L = ['aaa-12', 'bbbaaa', '
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
并希望搜索包含字符串'abc'
的项目。我该怎么做
if 'abc' in my_list:
将检查列表中是否存在
'abc'
,但它是'abc-123'
和'abc-456'
的一部分,'abc'
本身不存在。因此,如何获取包含'abc'
的所有项目?如果您只想检查列表中任何字符串中是否存在abc
,可以尝试
x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
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]
使用
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
类型。这是一个很老的问题,但我给出了这个答案,因为前面的答案不处理列表中不是字符串(或某种可编辑对象)的项。这样的项目会导致整个列表理解失败,只有一个例外
for item in my_list:
if item.find("abc") != -1:
print item
要通过跳过不可删除的项来优雅地处理列表中的此类项,请使用以下命令:
[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的测试可能不是最好的。从这里得到它:只是把它扔出去:如果您碰巧需要匹配多个字符串,例如
abc
和def
,您可以将两种理解结合起来,如下所示:
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
lst=['abc-123', 'def-456', 'ghi-789', 'abc-456']
[n for n, x in enumerate(lst) if 'abc' in x]
输出:
['abc-123', 'def-456', 'abc-456']
如果您只需要知道“abc”是否在其中一项中,这是最短的方法:
if 'abc' in str(my_list):
注:假设“abc”是字母数字文本。如果“abc”可能只是一个特殊字符(例如,.[]',),请不要使用它。我是Python新手。我使用了下面的代码,使其易于理解:
my_list=['abc-123','def-456','ghi-789','abc-456']
对于my_列表中的项目:
如果项目中有“abc”:
打印(项目)
问题:给出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']
我做了一个搜索,它要求您输入一个特定的值,然后它将从包含您输入的列表中查找一个值:
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”。使用Pythons字符串类的方法:
a=['abc-123','def-456','ghi-789','abc-456']
对于我来说,在一个:
如果i.。uuuu包含以下内容:
打印(i,“包含”)
我需要列出与匹配对应的索引,如下所示:
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
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']
将nan添加到列表中,以下内容适用于我:
some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456',np.nan]
any([i for i in [x for x in some_list if str(x) != 'nan'] if "abc" in i])
我必须检查6个元素的数组中是否有一个项目。执行6“if”是更快还是相同?@OlivierPons,只需执行myarray中的if myitem:获取包含子字符串“abc”的所有字符串的另一种方法:
过滤器(lambda元素:元素中的abc,some_list)
@p014k:使用索引()
方法:尝试:返回mylist.index(myitem);除了ValueError:pass
@midkin:我既不明白你到底想做什么,也不明白它是如何出错的。通过问一个新问题(使用“提问”按钮)、复制您的确切代码、您希望代码做什么以及它实际做了什么,您可能会更幸运。除非你定义了“工作”在这个上下文中的含义,否则“不工作”是完全没有意义的,但即使这样,最好解释实际发生了什么,而不是说什么没有发生。检查相反的情况(如果一个字符串包含多个字符串中的一个):如果条目的左侧部分是唯一的,考虑从列表中构造一个DICT:如果你打算采用这种方法,我认为在项目中使用<代码>如果是“ABC”,而不是使用<代码>项目。找到(ABC)==-1 < /代码>。这正是我所搜索的。谢谢您还可以使用{s for s in my_list for xs in matchers if xs in s}
(请注意花括号以创建唯一的集合)。可能更容易阅读,但如果大多数s
值都有匹配项,则可能会更慢,因为您的任何都将在第一次匹配时有效地停止。在给定的示例中,[el for el in lst if el and(st in el)]
不是更有意义吗?@tinix我不知道这将优雅地处理不可编辑的对象,是吗?“给定的示例”my_list=['abc-123'、'def-456'、'ghi-789'、'abc-456']
无需过分复杂化。是的,绝对正确-接受的答案非常合适,我的建议更复杂,因此,请随意忽略它-我只是提供了一个例子,以防有人遇到与我相同的问题:尽管在给定的示例中不存在,但此类列表中的不可iterable项是现实世界中的可能性。如果您有一个[“abc1”,“1abc2”]的列表,这将失败,因为它将找到匹配项,因为字符串“abc”将位于新创建的stringYes中,这是预期的行为。。。如果其中任何一项包含“abc”,我不知道为什么所有其他人都会在不需要的时候决定使用那些复杂的lambda解决方案!干得好@Rogers事实上同样的问题几乎可以自己回答。。。我刚刚添加了3个字母。这是一个很好的解决方案,但是如果你想找到包含给定字符串的项目,你将不会成功。在这里,您可以发现是否有任何项包含该字符串。在Python3.6中,这会给出一个错误:TypeError:预期的字符串或类似的字节object@AimForClarity对python3.6中的re.findall需要一个字符串。另一种方法是将列表转换为字符串import re
mylist=['abc'、'def'、'ghi'、'abcff']
my\u list\u string=''。join(mylist)
string\u to\u find=“abc”
res=re.findall(string\u to\u find,my\u list\u string)
打印(res
很抱歉格式不好。无法为某些re执行适当的换行
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']
some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456',np.nan]
any([i for i in [x for x in some_list if str(x) != 'nan'] if "abc" in i])