作为风格问题,我会将文件名传递给bres
,并让它返回一个列表,然后您从调用者那里打印出来。
def bres(file1, file2):
sets = []
for n in (file1, file2):
with open(n) as f:
sets.append( set( f.readline().split() ) )
return list(sets[0] & sets[1])
print ' '.join(bres('one.txt', 'two.txt'))
像上面那样使用with
(和你一样)是处理打开和读取文件的最干净和最明确的方法。但是,如果您出于某种原因对较短的代码感兴趣,并且不介意依靠垃圾收集来为您关闭文件句柄,则可以使用列表推导将集合列表的创建缩短为一行:
def bres(file1, file2):
sets = [ set( file(f).readline().split() ) for f in (file1, file2) ]
return list(sets[0] & sets[1])
print ' '.join(bres('one.txt', 'two.txt'))
我很想导入operator
和使用reduce(operator.and_, sets)
来概括事物 - 那些显式索引只会让我烦恼。但这可能会在“Guido 不喜欢函数式编程的原因”下归档......