我有一个L元素列表,例如自然数。我想将它们打印在一行中,并用一个 空格 作为分隔符。但是我 不想 在列表的最后一个元素之后(或第一个元素之前) 留 一个空格。
L
在Python 2中,可以使用以下代码轻松完成此操作。该print语句的执行(我必须承认,这是个谜),避免在换行符前打印多余的空格。
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功能是否支持我正在寻找的行为?
您可以将列表作为单独的参数应用:
print(*L)
并print()注意将每个元素转换为字符串。您可以一如既往地通过设置sep关键字参数来控制分隔符:
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():
str.join()
joined_string = ' '.join([str(v) for v in L]) print(joined_string) # do other things with joined_string
请注意,对于L!中的任何非字符串值,这都需要手动转换为字符串。