如何判断目标字符串是否匹配列表元素?存在匹配即返回True
需求与问题
需求很明确:判断一个字符串是否和列表中的元素匹配——只要列表里有任意一个元素能和该字符串匹配(不管匹配多少个),就返回True;没匹配到就返回False。
能正确返回True的代码
当列表元素是单个独立字符串时,现有代码可以正常工作:
txt = ["to","do","list","to","test","it"] x = "to" if x in txt: print("match") else: print("no match")
这段代码返回match,因为"to"是列表txt的直接成员。
会返回False的情况1
如果列表元素是包含多个子串的字符串,现有代码会失效:
txt = ["to,do,list","to,test,it"] x = "to" if x in txt: print("match") else: print("no match")
这段代码返回no match,因为"to"不是列表的直接元素,只是列表元素里的子串,x in txt只会检查x是否是列表的成员,不会检查元素内部是否包含x。
会返回False的情况2
当列表元素是拼接后的字符串时,同样会返回False:
txt = ["todolist","totestit"] x = "to" if x in txt: print("match") else: print("no match")
原因和上面一致,"to"是元素的子串,但不是列表的直接成员,所以x in txt判断不成立。
解决方案
要实现需求,需要检查列表中每个元素是否包含目标字符串(或者完全等于,根据实际需求调整),可以用any()函数快速实现:
txt = ["to,do,list","to,test,it"] x = "to" if any(x in item for item in txt): print("match") else: print("no match")
any()会遍历列表中的每个元素,只要有一个元素包含x,就返回True,直接输出match;如果所有元素都不包含x,则返回False,输出no match。
如果你的需求是完全匹配(即目标字符串必须和列表中某个元素完全一样),那第一个案例的代码就足够用;但从你给出的后两个案例来看,应该是需要检查子串匹配,上面的代码就能解决问题。
内容的提问来源于stack exchange,提问作者ADaren
相关产品推荐
相关产品推荐

