簡體   English   中英

如何檢查字符串列表中是否存在字符串,包括子字符串?

[英]How do I check existence of a string in a list of strings, including substrings?

我編寫了一個函數來檢查列表中是否存在值,如果存在則返回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方式進行此操作?

這與另一個SO問題非常相似,但我需要檢查列表中任何位置是否存在ENTIRE val字符串。 返回匹配的索引/索引也很棒,但我確信Stackoverflow上的其他內容已經覆蓋了。

如果我理解你的問題,那么我猜你需要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

這樣做有多種可能性。 例如:

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)

大部分都被覆蓋了,但是如果你想獲得匹配的索引,我會建議這樣的事情:

indices = [index for index, content in enumerate(input) if substring in content]

如果要添加true/false您仍然可以直接使用此列表推導的結果,因為如果您的輸入不包含將評估為False的子字符串,它將返回一個空列表。

在你的第一個功能方面:

def isValInLst(val, lst):
    return bool([index for index, content in enumerate(lst) if val in content])

bool()只是將答案轉換為布爾值,但沒有bool,這將返回列表中出現子字符串的所有位置的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM