1

这是精简的代码:

import itertools

def Compare(file1, file2):

    with open(file1+'.txt', 'r') as f1, open(file2+'.txt', 'r') as f2:
        for line in itertools.product(f1, f2):
            print (line),

它将始终打印出存在的总行数中的每一行。因此,如果特定 txt 文件中总共有 4 行,它将每行打印 4 次,因此结果将是 16 行,其中 12 行是重复的。

4

2 回答 2

2

因为itertools.product本质上是将两个列表相乘。

文档中:

笛卡尔积,相当于嵌套的 for 循环

4 行乘以 4 行将是 16 行。

于 2013-05-30T10:30:05.027 回答
2

就是itertools.product这样 - 将每个元素放入a并将其与 .If 中的所有元素b配对。如果您希望每个文件中的每一行都配对,那么您想查看itertools.izip,例如:

from itertools import product, izip
from pprint import pprint

a = ['a_one', 'a_two', 'a_three']
b = ['b_one', 'b_two', 'b_three']

pprint(list(product(a, b)))
[('a_one', 'b_one'),
 ('a_one', 'b_two'),
 ('a_one', 'b_three'),
 ('a_two', 'b_one'),
 ('a_two', 'b_two'),
 ('a_two', 'b_three'),
 ('a_three', 'b_one'),
 ('a_three', 'b_two'),
 ('a_three', 'b_three')]

pprint(list(izip(a, b)))
[('a_one', 'b_one'), ('a_two', 'b_two'), ('a_three', 'b_three')]

如果您的目标是比较文件,那么值得查看filecmpdifflib模块。

于 2013-05-30T10:33:34.953 回答