0

如何检查字符串中的特定字符? 我发现这个链接非常有用。但是我的代码有什么问题?

string = "A17_B_C_S.txt"

if ("M.txt" and "17") in string:
    print True
else:
    print False

答案总会出来

True
4

4 回答 4

3

这是因为您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"]):
    #...
于 2013-07-25T12:39:16.050 回答
2
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'
>>> 
于 2013-07-25T12:39:29.530 回答
2

那是因为

("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:
于 2013-07-25T12:47:45.060 回答
1

("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")):
于 2013-07-25T12:39:37.243 回答