python if (X not in Y) or (Z not in Y) 条件意外结果
python if (X not in Y) or (Z not in Y) condition unexpected result
有一个文件名列表,如:
files = ["f1", "f2", "f3", "f4", "f1.txt", "f3.pdf"]
并且我想找到那些具有相同名称的“txt”或“pdf”等效项的文件,并将它们从列表中删除。所以所需的输出是 f2 f4 f1.txt f3.pdf
我试过这个:
for f in files:
if f+".txt" not in files or f+".pdf" not in files:
print(f)
输出:f1 f2 f3 f4 f1.txt f3.pdf
这是错误的。
我也尝试在每个条件周围加上括号 not f+".txt" in files
但没有成功。
通过删除两个或一个“not”,输出符合预期:
for f in files:
if f+".txt" in files or f+".pdf" in files:
print(f)
输出:f1 f3
为了获得所需的输出,我可以在 if 块中使用 pass 语句并在 else 块中使用 print(f)。
但问题是“为什么第一个代码不起作用?”我在发布之前进行了一些搜索,但它们并不是我要找的。
试试这个代码:
files = ["f1", "f2", "f3", "f4", "f1.txt", "f3.pdf"]
for f in files:
if f+".txt" not in files and f+".pdf" not in files:
print(f)
有一个文件名列表,如:
files = ["f1", "f2", "f3", "f4", "f1.txt", "f3.pdf"]
并且我想找到那些具有相同名称的“txt”或“pdf”等效项的文件,并将它们从列表中删除。所以所需的输出是 f2 f4 f1.txt f3.pdf
我试过这个:
for f in files:
if f+".txt" not in files or f+".pdf" not in files:
print(f)
输出:f1 f2 f3 f4 f1.txt f3.pdf
这是错误的。
我也尝试在每个条件周围加上括号 not f+".txt" in files
但没有成功。
通过删除两个或一个“not”,输出符合预期:
for f in files:
if f+".txt" in files or f+".pdf" in files:
print(f)
输出:f1 f3
为了获得所需的输出,我可以在 if 块中使用 pass 语句并在 else 块中使用 print(f)。
但问题是“为什么第一个代码不起作用?”我在发布之前进行了一些搜索,但它们并不是我要找的。
试试这个代码:
files = ["f1", "f2", "f3", "f4", "f1.txt", "f3.pdf"]
for f in files:
if f+".txt" not in files and f+".pdf" not in files:
print(f)