0
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。错误在哪里?

4

3 回答 3

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()
于 2012-10-21T03:22:14.980 回答
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(和你一样)是处理打开和读取文件的最干净和最明确的方法。但是,如果您出于某种原因对较短的代码感兴趣,并且不介意依靠垃圾收集来为您关闭文件句柄,则可以使用列表推导将集合列表的创建缩短为一行:

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 不喜欢函数式编程的原因”下归档......

于 2012-10-21T03:53:08.730 回答
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).

于 2012-10-21T03:27:03.683 回答