如何检查字符串中的特定字符? 我发现这个链接非常有用。但是我的代码有什么问题?
string = "A17_B_C_S.txt"
if ("M.txt" and "17") in string:
print True
else:
print False
答案总会出来
True
如何检查字符串中的特定字符? 我发现这个链接非常有用。但是我的代码有什么问题?
string = "A17_B_C_S.txt"
if ("M.txt" and "17") in string:
print True
else:
print False
答案总会出来
True
这是因为您and评估的17是 in stringList。由于and短路,评估为 17。
>>> "M.txt" and "17"
'17'
Python 将非空字符串计算为 value True。因此,M.txt计算结果为True,因此表达式的值取决于返回的第二个值(17)并在stringList. (为什么?当and用一个True值执行时,表达式的值取决于第二个值,如果是False,则表达式的值是False,否则是True。)
你需要改变你的表达方式
if "M.txt" in stringList and "17" in stringList:
#...
或者使用内置all()
if all(elem in stringList for elem in ["M.txt", "17"]):
#...
stringList = "A17_B_C_S.txt"
if "M.txt" in stringList and "17" in stringList:
print True
else:
print False
>>>
True
('M.txt' and '17')返回'17'。所以你只是在测试'17' in stringList。
>>> ('M.txt' and '17')
'17'
>>>
那是因为
("M.txt" and "17") in string
并不意味着它可能听起来像什么。在 python 中,这意味着:
测试是否在“字符串”中找到一个值,在执行布尔运算时以及在“M.txt”和“17”之间找到一个值
and在您的代码中,不仅执行and运算符,还返回最后一项,即"17". 因此 ("M.txt" and "17") 将返回 "17",因此它实际上只会测试是否"17"在string
如果你真正想要的是:
测试字符串中是否有“M.txt”以及字符串中是否有“17”
你必须写:
if "M.txt" in string and "17" in string:
("M.txt" and "17")返回"17",因为它的计算结果为(True and True)( bool("M.txt") == True)。因此,选择了第二个。
然后你想说if "17" in string。
您必须单独比较这些项目:
if "M.txt" in stringList and "17" in stringList:
甚至:
if all(i in stringList for i in ("M.txt", "17")):