我有一个元素列表,比如自然数。我想用一个空格作为分隔符将它们打印成一行。但我不想在列表的最后一个元素之后(或第一个元素之前)有空格。
在Python2中,这可以通过以下代码轻松完成。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))
这是一个很好的解决方案,但与Python2代码相比,我发现它有违直觉,而且速度肯定较慢。另外,我知道我可以自己选择是否打印空间,比如:
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
函数支持?
虽然接受的答案是绝对明确的,我只是想检查效率方面的时间。
最好的方法是打印转换为字符串的数字连接字符串。
请注意,我使用了map而不是loop。 我写了四种不同的时间比较方法的代码:
结果:
结果让我很吃惊。“loop method”和“joined string method”情况下的时间差异很大。
结论:如果尺寸过大(按10*5或更大的顺序),不要使用循环打印列表。
可以将列表作为单独的参数应用:
让
print()
把每个元素转换成一个字符串。您可以像往常一样通过设置sep
关键字参数来控制分隔符:除非您需要将连接字符串用于其他用途,否则这是最简单的方法。否则,请使用
str.join()
:注意,对于
L
中的任何非字符串值,这需要手动转换为字符串!for循环真的要花很长时间才能运行吗?
试图将所有str值打印到一个用逗号分隔的列表中,在最后一个条目前插入“and”并得出以下结果:
相关问题 更多 >
编程相关推荐