如果我有一个字符串列表:
matches = [ 'string1', 'anotherstring', 'astringystring' ]
我还有另一个我要测试的字符串:
teststring = 'thestring1'
我想测试每个字符串,如果有任何匹配,请做一些事情。我有:
match = 0
for matchstring in matches:
if matchstring in teststring:
match = 1
if !match:
continue
这是一个循环,所以如果我们没有得到一个匹配,我们就再来一次(我当然可以改变这个逻辑并做一些匹配的事情),但代码看起来很笨拙而不是pythonic,如果简单的话跟随。
我认为有更好的方法可以做到这一点,但我并不像我想的那样grok python。有更好的方法吗?
注意“重复”是相反的问题(尽管相同的答案方法是相同的)。
答案 0 :(得分:4)
您可以在这里使用image here
<强>代码:强>
if any(matchstring in teststring for matchstring in matches):
print "Matched"
备注:强>
any
会在看到匹配后立即退出。for matchstring in matches
,此处matches
中的每个字符串都会被迭代。matchstring in teststring
我们正在检查迭代的字符串是否在定义的检查字符串中。any
会在表达式中看到True
[匹配]后立即退出。答案 1 :(得分:1)
如果您想知道第一场比赛是什么,可以使用next
:
match = next((match for match in matches if match in teststring), None)
如果您不希望在没有任何内容匹配时引发异常,则必须将None
作为第二个参数传递。它会将该值用作默认值,因此如果找不到任何内容,match
将为None
。
答案 2 :(得分:0)
你怎么试试这个:
len([ x for x in b if ((a in x) or (x in a)) ]) > 0
我已经更新了答案以检查子串两种方式。您可以根据需要选择或修改,但我认为基础知识应该非常清楚。