我尝试使用__contains__
多个条件进行过滤,但没有得到我需要的结果
这是我的代码:
text = ['BAILE\nMADRID\nPRECIO\n15,20€\n','DANZA\nBARCELONA\nPRECIO\n13,50€\n','BACHATA']
result = [line for line in text if not line.__contains__(('MADRID\nPRECIO\n15') or ('BARCELONA\nPRECIO\n13')) ]
print(result)
您应该得到的结果是:
['BACHATA']
但它让我失望了:
Output:
['DANZA\nBARCELONA\nPRECIO\n13,50�\n', 'BACHATA']
如果我__contains__
只使用一个条件,它就可以了。
我做错了什么?
这是由 Python 如何评估contains调用中的 or 条件决定的。您需要分别显式检查两个条件,然后将它们与 or 组合起来,如下所示:
与使用contains相比,使用 Python 中的 in 运算符来检查字符串中是否存在子字符串更加惯用。
您的逻辑表达不正确,您应该对整个
__contains__
表达式进行如下或运算:注意:要了解您的原始逻辑在做什么以及为什么它会表现得如此,请考虑:
因此,您的初始逻辑实际上只过滤了第一个字符串,但没有过滤第二个字符串。