为什么这个for循环会增加一切?

时间:2013-05-30 10:28:16

标签: python

这是精简代码:

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行是重复的。

2 个答案:

答案 0 :(得分:2)

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

来自documentation

  

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

4行乘以4行将是16行。

答案 1 :(得分:2)

这就是itertools.product所做的事情 - 将a中的每个元素与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模块。