首页 > 解决方案 > Python中的'in'有多灵活,例如yyy中的'xxx':

问题描述

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

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

'in' 将允许部分和拆分字符串匹配吗?

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

我花了一整天的时间寻找错误,归结为上述内容。否则,代码是逐行相同的。最糟糕的是两个脚本都可以正常工作,我只是在拼命整合它们。其他人关于遗留/部分数据的遗留代码,文档有限。我最终修复了它,但这些是我挥之不去的问题。

标签: python-3.xstringlistboolean-logicboolean-operations

解决方案


欢迎崩溃

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

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

正在检查列表是否包含它所做的“xxx”

if 'xxx' or 'yyy' in z:

将始终返回 True 因为非空字符串是真实的;即是真 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':

那只会检查确切的字符串文字;如果您想同时查找两者,xx或者yy有多种方法可以处理它,但我可能会将第一个字符串转换为列表并检查如下元素:

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']):

推荐阅读