我已经在这个问题上挣扎了几个小时。希望有人能帮助我。输入是包结构,例如{([1,2]),([3,4])}
,目标是输出包中元组的相应元素的总和,比如说(4,6)
。非常感谢。
我的代码:
@outputSchema('aa:chararray')
def func(input):
aa = map(sum,zip(*,input))
aa = str(aa)
return aa
TypeError:+:' int'不支持的操作数类型和' unicode'
答案 0 :(得分:1)
这是猜测。消息:
TypeError: unsupported operand type(s) for +: 'int' and 'unicode'
指片段:
map(sum,zip(*,input))
这意味着你试图将总和作为unicode元组,例如[u'1', u'2']
而不是int的元组,例如[1,2]
正如您认为的那样。
如果是这种情况,那么您可以将zip包装在list comprehension内以进行从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
如果由此解决问题,那么获取更多信息会很有帮助。例如,该类型错误是否指向代码中的特定行?如果是这样,哪一行?
也许您可以展示input
或*
的类型。例如,更改您的功能:
...
def func(input):
aa = map(sum,zip(*,input))
...
到:
def func(input):
print(map(type, input))
print(map(type, *))
aa = map(sum,zip(*,input))