我有输入,可以是单个基元,也可以是基元列表或元组。
我想将其展平为一个列表,如下所示:
def flatten(values):
return list(values)
正常情况会变平(someiterablethatisn'tastring)
但是如果 values = '1234',我会得到 ['1', '2', '3', '4'],但我想要 ['1234']
如果 values = 1,我会得到 TypeError: 'int' object is not iterable,但我想要 [1]
有没有一种优雅的方式来做到这一点?最后我真正想做的只是 '\t'.join(flatten(values))
编辑:让我更好地解释一下......
我希望使用小飞象将 hadoop 二进制序列文件转换为平面制表符分隔的文本文件。使用输出格式选项 -outputformat text
Dumbo 是一个围绕 hadoop 流的 python 包装器。简而言之,我需要编写映射器函数:
def mapper(key, values) #做一些事情 yield k, v
其中 k 是键中第一部分的字符串,value 是制表符分隔的字符串,包含键的其余部分和字符串形式的值。
例如:
input: (123, [1,2,3])
output: ('123', '1\t2\t\t3')
或更复杂:
input: ([123, 'abc'], [1,2,3])
output: ('123', 'abc\t1\t2\t\t3')
输入键或值可以是原语或原语列表/元组我想要一个可以处理任何东西并返回值列表的“扁平化”函数。
对于输出值,我会做这样的事情 v = '\t'.join(list(str(s) for s in flatten(seq)))