一尘不染

在Python 3中打印以空格分隔的元素的列表

python

我有一个L元素列表,例如自然数。我想将它们打印在一行中,并用一个 空格 作为分隔符。但是我 不想
在列表的最后一个元素之后(或第一个元素之前) 一个空格。

在Python 2中,可以使用以下代码轻松完成此操作。该print语句的执行(我必须承认,这是个谜),避免在换行符前打印多余的空格。

L = [1, 2, 3, 4, 5]
for x in L:
    print x,
print

但是,在Python 3中,似乎(使用)该print函数的等效代码在最后一个数字之后产生一个空格:

L = [1, 2, 3, 4, 5]
for x in L:
    print(x, end=" ")
print()

当然,我的问题有简单的答案。我知道我可以使用字符串连接:

L = [1, 2, 3, 4, 5]
print(" ".join(str(x) for x in L))

这是一个很好的解决方案,但是与Python 2代码相比,我发现它违反直觉,而且绝对慢。另外,我知道我可以选择是否自己打印空格,例如:

L = [1, 2, 3, 4, 5]
for i, x in enumerate(L):
    print(" " if i>0 else "", x, sep="", end="")
print()

但这又比我在Python 2中的糟糕。

所以,我的问题是,我在Python 3中缺少什么吗?该print功能是否支持我正在寻找的行为?


阅读 135

收藏
2020-12-20

共1个答案

一尘不染

您可以将列表作为单独的参数应用:

print(*L)

print()注意将每个元素转换为字符串。您可以一如既往地通过设置sep关键字参数来控制分隔符:

>>> L = [1, 2, 3, 4, 5]
>>> print(*L)
1 2 3 4 5
>>> print(*L, sep=', ')
1, 2, 3, 4, 5
>>> print(*L, sep=' -> ')
1 -> 2 -> 3 -> 4 -> 5

除非您需要连接字符串用于其他用途,否则这是最简单的方法。否则,请使用str.join()

joined_string = ' '.join([str(v) for v in L])
print(joined_string)
# do other things with joined_string

请注意,对于L!中的任何非字符串值,这都需要手动转换为字符串。

2020-12-20