one = open('one.txt')
two=open('two.txt')
def bres(obj1,obj2):
x=obj1.readline().split()
cc=obj2.readline().split()
ela=set(x)
elamou=set(cc)
print elamou|ela
bres(one,two)
文件one.txt
是这样的:one two tree
文件two.txt
是这样的:one four
我想找到两个文件的联合。这段代码的结果是一组空白。正确答案是one
。错误在哪里?
答案 0 :(得分:2)
我找到了它!
def bres():
with open('one.txt') as f:
x=f.readline().split()
with open('two.txt') as f:
cc=f.readline().split()
ela=set(x)
elamou=set(cc)
print elamou&ela
bres()
答案 1 :(得分:1)
作为一种风格问题,我会将文件名传递给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
是处理打开和读取文件的最干净,最明确的方法。但是,如果由于某种原因您对较短的代码感兴趣,并且您不介意依赖垃圾收集来为您关闭文件句柄,则可以使用列表解析将设置列表的创建缩短为一行: / p>
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不喜欢功能性编程”的原因下提出的......
答案 2 :(得分:0)
def bres(obj1,obj2):
x=obj1.readline().split()
cc=obj2.readline().split()
results=[]
for a in x:
if a in cc:
results.append(a)
return results
以上内容应该有效,并且基于您提供的代码。
要获得结果,您只需使用print bres(file_object_1,file_object_2)
。