给出以下列表:
a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
如何获得:
s = '1.0 1.2 1.4 2.0 2.2 5.0
我似乎无法使用join(),map()或列表推导构建一些不会因为不可迭代的最后一个成员而失败的东西。
答案 0 :(得分:4)
这个解决方案有点hackish但是JOB以最少的努力完成
>>> a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
>>> str(a)
'[[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]'
>>> str(a).translate(None,'[],')
'1.0 1.2 1.4 2.0 2.2 5.0'
答案 1 :(得分:1)
>>> a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
>>> ' '.join(str(s) for x in a for s in (x if isinstance(x, list) else [x]))
'1.0 1.2 1.4 2.0 2.2 5.0'
这与以下for循环的行为相同:
tmp = []
for x in a:
if isinstance(x, list):
for s in x:
tmp.append(s)
else:
tmp.append(x)
result = ' '.join(tmp)
请注意,这假设只有一个级别的嵌套,如您的示例所示。如果您需要使用任何可任意迭代而不是仅列表,则可以使用collections.Iterable
,只要您的值不是字符串(否则它将迭代字符串中的字符)。
答案 2 :(得分:0)
我会去:
a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0]
def try_iter(item):
try:
return iter(item)
except:
return (item,)
from itertools import chain
print ' '.join(str(s) for s in chain.from_iterable(map(try_iter, a)))