2

我已经在这个问题上苦苦挣扎了几个小时。希望任何人都可以帮助我。输入是bag结构,比如{([1,2]),([3,4])},目标是输出bag中对应元组元素的和,比如(4,6)。非常感谢。

我的代码:

@outputSchema('aa:chararray')
def func(input):
    aa = map(sum,zip(*,input)) 
    aa = str(aa)
    return aa

类型错误:+ 不支持的操作数类型:“int”和“unicode”

4

1 回答 1

1

这是一个猜测。消息:

 TypeError: unsupported operand type(s) for +: 'int' and 'unicode'

指的是片段:

  map(sum,zip(*,input)) 

这意味着您正在尝试获取一个 unicode 元组的总和,例如,[u'1', u'2']而不是一个 int 的元组,例如[1,2]您认为您正在使用的。

如果是这种情况,那么您可以将 zip 包装在列表推导中以进行从 unicode 到 int 的转换:

 [map(int, a) for a in zip(*,input)]

但是您可能还潜伏着另一个错误。@outputSchema('aa:chararray')根据您要返回字符串列表而不是单个字符串来判断;str([1,2])"[1,2]"和我想你想要["1", "2"]的。如果是这种情况(并且您可能不应该检查),您也可以将其包装在列表理解中:

aa = [str(s) for s in aa]

结合这两个更改,您的代码变为:

@outputSchema('aa:chararray')
def func(input):
    aa = map(sum,[map(int, a) for a in zip(*,input)])
    aa = [map(str, a) for a in aa]
    return aa

如果从中无法解决问题,那么获得更多信息会有所帮助。例如,该类型错误是否指向代码中的特定行?如果有,是哪条线?

也许您可以显示inputor的类型*。例如,将您的功能从:

 ...
 def func(input):
   aa = map(sum,zip(*,input)) 
 ...

至:

 def func(input):
   print(map(type, input))
   print(map(type, *))
   aa = map(sum,zip(*,input))
于 2015-05-31T12:49:06.803 回答