嵌套 for 循环 Python 未按预期工作

Nested for loop Python not working as expected

我试图通过打开两个 txt 文件来读取它们,然后我想查找是否有任何行匹配(它们不需要按正确的顺序排列)。

例如:

txt 文件 1:

1
2
8
4
3
9

txt 文件 2:

2
0
10
9
8

所以 2、9 和 8 在这里是匹配项。

下面是我到目前为止尝试过的代码,但目前这两个 txt 文件中没有输出结果。它目前没有输出任何东西,这表明它正沿着 else 路径前进。

with open('file1.txt') as file1, open('file2.txt') as file2:
    for domain in file2:
        for domain_2 in file1: 
            if domain == domain_2: 
                print(domain + "Match found")
            else:
                continue

最简单的方法是将这些数字列表转换为集合,然后取它们的交集。这就是 set() 诞生的目的:-)。

假设您已经可以将文件内容读入列表,那么解决方案变为:

file1_data = ["2", "8", "4", "3", "9"]
file2_data = ["2", "0", "10", "9", "8"]
print(list(set(file1_data).intersection(file2_data)))

给我们:

['2', '8', '9']

如果您想根据与您现在所拥有的策略类似的策略进行更手动的方法,我会:

file1_data = ["2", "8", "4", "3", "9"]
file2_data = ["2", "0", "10", "9", "8"]
results = []
for value_1 in file1_data:
    if value_1 in file2_data:
        results.append(value_1)
print(results)

或者您可以使用列表理解:

results = [value_1 for value_1 in file1_data if value_1 in file2_data]
print(results)

最后两个版本中的关键部分是测试当前值 (value_1) 是否在您的第二个列表中通过:

value_1 in file2_data

如果问题的一部分与无法从 file1 中“重新读取”​​有关,那是因为在通过其生成器到达 file1 的末尾后,您将拥有重新阅读以回到开头。

出于这个原因,我建议将文件中的数据读取到没有此生成器限制的列表中。

with open("file1.txt", "r") as file1:
    file1_data = [n.strip() for n in file1]

with open("file2.txt", "r") as file2:
    file2_data = [n.strip() for n in file2]

虽然我不喜欢它,但您也可以这样做,这与您当前的解决方案非常接近:

with open('file1.txt') as file1:
    with open('file2.txt') as file2:
        for domain_2 in file2:
            file1.seek(0)
            for domain_1 in file1: 
                if domain_1.strip() == domain_2.strip(): 
                    print(f"Match Found: {domain_1.strip()}")
                else:
                    continue

这给了我们:

Match Found: 2
Match Found: 9
Match Found: 8

请注意,与您当前解决方案的偏差主要是添加 file1.seek(0) 以将 file1 重置回起点,并包含各种 .strip() 以摆脱回车 returns 在原始数据中。另请注意,else: continue 在技术上是多余的,可以省略。