我正在寻找一个布尔一行,以查看特定子字符串是否在字符串列表中。所以我可以在像
这样的东西中使用它if( (condition1) and (condition2) and (python_one_liner) ):
# Do some things here
这有望取代以下内容:
if( (condition1) and (condition2) ):
Condtion3 = False
for str in list_of_strings:
if( mystr in str ):
Condition3 = True
if( Condition3 ):
# Do some things here
一种显而易见的方法是简单地编写一个函数并在初始if
语句中评估该函数。我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:5)
将any()
function与生成器表达式一起使用:
if condition1 and condition2 and any(mystr in s for s in list_of_strings):
这比您的版本更有效,因为只有s
的{{1}}值才会被测试,直到找到第一个list_of_strings
值。
如果您还需要知道匹配的字符串,您可以获得第一个这样的字符串:
True
其中next()
function将生成器表达式迭代到第一个匹配并返回,或者如果没有匹配的字符串则返回match = next((s for s in list_of_strings if mystr in s), None)
if condition1 and condition2 and match:
。