我编写了一个函数来检查列表中是否存在值,如果存在则返回True。它适用于精确匹配,但如果值存在于列表条目中的任何位置,我需要它返回True(例如,值< = listEntry,我认为。)这是我用于函数的代码:
def isValInLst(val,lst):
"""check to see if val is in lst. If it doesn't NOT exist (i.e. != 0),
return True. Otherwise return false."""
if lst.count(val) != 0:
return True
else:
print 'val is '+str(val)
return False
没有循环遍历整个字符串和/或使用RegEx(除非那些是最有效的),我应该如何以pythonic方式进行此操作?
这与another SO question非常相似,但我需要检查列表中任何位置是否存在ENTIRE val字符串。返回匹配的索引/索引也很棒,但我确信Stackoverflow上的其他内容已经覆盖了。
答案 0 :(得分:10)
如果我理解了您的问题,那么我猜你需要any
:
return any(val in x for x in lst)
<强>演示:强>
>>> lst = ['aaa','dfbbsd','sdfdee']
>>> val = 'bb'
>>> any(val in x for x in lst)
True
>>> val = "foo"
>>> any(val in x for x in lst)
False
>>> val = "fde"
>>> any(val in x for x in lst)
True
答案 1 :(得分:1)
有多种可能性。例如:
def valInList1 (val, lst):
# check `in` for each element in the list
return any(val in x for x in lst)
def valInList2 (val, lst):
# join the list to a single string using some character
# that definitely does not occur in val
return val in ';;;'.join(lst)
答案 2 :(得分:1)
大部分都被覆盖,但是如果你想获得匹配的索引,我会建议这样的事情:
indices = [index for index, content in enumerate(input) if substring in content]
如果要添加true/false
,您仍然可以直接使用此列表推导的结果,因为如果您的输入不包含将评估为{{1}的子字符串,它将返回一个空列表}。
在你的第一个功能方面:
False
其中bool()只是将答案转换为布尔值,但没有bool,这将返回列表中出现子字符串的所有位置的列表。