在Python中将float list连接到以空格分隔的字符串

rob*_*ntw 32 python list

我在python中有一个浮点列表:

a = [1.2, 2.9, 7.4]
Run Code Online (Sandbox Code Playgroud)

我想加入它们以产生一个以空格分隔的字符串 - 即:

1.2 2.9 7.4
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试:

print " ".join(a)
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,因为它们是浮动的,当我尝试时:

print " ".join(str(a))
Run Code Online (Sandbox Code Playgroud)

我明白了

[ 1 . 2 ,   1 . 8 ,   5 . 2 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 ]
Run Code Online (Sandbox Code Playgroud)

如何将元素(单独)转换为字符串,而不必遍历所有元素,从而加入所有元素?

Sve*_*ach 77

您需要将列表的每个条目转换为字符串,而不是一次转换整个列表:

print " ".join(map(str, a))
Run Code Online (Sandbox Code Playgroud)

如果您想要更多地控制转换为字符串(例如,控制要打印的位数),您可以使用

print "".join(format(x, "10.3f") for x in a)
Run Code Online (Sandbox Code Playgroud)

请参阅格式说明符语法的文档.

  • +1除了第一个,`"".join(str(x)for a in a)`(在Python 2.x中,这也有一个小的实际优点 - 它不会为所有中间字符串分配内存立刻). (12认同)
  • 对于格式化的字符串,`''.join("%10.3f"x中的x为%)`的速度是我机器上``format(x,"10.3f")`版本的两倍(使用列表1000`random()`floats). (3认同)

Arn*_*ide 6

实际上你必须循环遍历它们。使用看起来非常干净的生成器或列表理解:

print " ".join(str(i) for i in a)
Run Code Online (Sandbox Code Playgroud)

(地图循环遍历它们,格式代码也是如此)

与列表理解相比,生成器的优点是不生成第二个中间列表,从而节省了内存。列表理解将是:

print " ".join([str(i) for i in a])
Run Code Online (Sandbox Code Playgroud)