Python 中 'in' 的灵活性如何,例如,如果 yyy 中的 'xxx':

How flexible is 'in' in Python e.g. if 'xxx' in yyy:

提问人:Crash 提问时间:8/28/2021 更新时间:8/28/2021 访问量:623

问:

两者之间是否存在有意义的区别:

z='xxx'
if z in ['xxx', 'yyy']:
if 'xxx' or 'yyy' in z:

“in”是否允许部分字符串和拆分字符串匹配?

if 'xx yy' in 'xx zz yy':

我花了一整天的时间寻找虫子,归结为上述内容。否则,代码行与行相同。最糟糕的是两个脚本都有效,我只是花了很长时间来整合它们。其他人在遗留/部分数据上的遗留代码,文档有限。我最终修复了它,但这些是我挥之不去的问题。

python-3.x 字符串 列表 boolean-logic boolean-operations

评论

1赞 that other guy 8/28/2021
这回答了你的问题吗?如何针对单个值测试多个变量?tl;博士,这并不意味着“X 在 z 中还是在 Y 中?”而是“X 是真值,还是 y 在 z 中”x or y in z

答:

0赞 Schalton 8/28/2021 #1

欢迎崩溃

是的,有一个有意义的区别

z='xxx'
z in ['xxx', 'yyy']

正在检查列表是否包含“xxx”,它确实包含

if 'xxx' or 'yyy' in z:

将始终返回 True,因为非空字符串为 truey;即为真if ('xxx'):

您可以更明确地将其重写为

if 'xxx' or ('yyy' in z):

我相信你要找的更像是这样:

if any([i in z for i in ['xxx', 'yyy']):

检查“xxx”或“yyy”是否在 z 中

FWIW;还有:

if all([i in z for i in ['xxx', 'yyy']):

关于您的问题

if 'xx yy' in 'xx zz yy':

这只会检查确切的字符串文字;如果你想同时寻找两者,或者有很多方法可以处理它,但我可能会把第一个字符串变成一个列表,并检查这样的元素:xxyy

if all([i in 'xx zz yy' for i in 'xx yy'.split(" ")]):

这与

if all([i in 'xx zz yy' for i in ['xx', 'yy']):

评论

0赞 Crash 8/28/2021
谢谢。感谢您的解释清晰透彻。
0赞 Schalton 8/30/2021
@Crash很高兴有帮助,如果仅此而已,请将问题标记为已回答。欢迎来到社区