在Python中将列表和单个浮点数连接到单个字符串

在Python中将列表和单个浮点数连接到单个字符串,python,Python,鉴于以下清单: 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()或列表理解中构建出一些东西,而这些理解不会因为最后一个成员不可iterable而失败 >>> a = [[1.0, 1.2, 1.4], [2.0, 2.2], 5.0] >>> ' '.join(str(s) for x in a for s in (x i

鉴于以下清单:

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()或列表理解中构建出一些东西,而这些理解不会因为最后一个成员不可iterable而失败

>>> 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)
请注意,这仅假设一个嵌套级别,如示例中所示。如果您需要它来处理任何任意iterable,而不是只能使用列表,只要您的值不是字符串(否则它将迭代字符串中的字符)。

我会选择:

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)))

这个解决方案有点老套,但只需最少的努力就可以完成这项工作

>>> 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表示有勇气将其作为答案给出。:^)一个优点是它可以自动处理任意级别的列表嵌套。