我有一个列表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
函数支持?
答案 0 :(得分:76)
您可以将列表作为单独的参数应用:
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
中的任何非字符串值的字符串!
答案 1 :(得分:1)
尽管公认的答案是绝对明确的,但我只是想检查时间方面的效率。
最好的方法是打印转换为字符串的数字连接字符串。
print(" ".join(list(map(str,l))))
请注意,我使用的是地图,而不是循环。 我编写了四种比较时间的小代码:
import time as t
a, b = 10, 210000
l = list(range(10, 21000))
tic = t.time()
for i in l:
print(i, end=" ")
print()
tac = t.time()
t1 = (tac - tic) * 1000
print(*l)
toe = t.time()
t2 = (toe - tac) * 1000
print(" ".join([str(i) for i in l]))
joe = t.time()
t3 = (joe - toe) * 1000
print(" ".join(list(map(str, l))))
toy = t.time()
t4 = (toy - joe) * 1000
print("Time,t1,t2,t3,t4")
结果:
时间74344.76 71790.83 196.99 153.99
输出令我非常惊讶。在使用“循环方法”和“连接字符串方法”的情况下,时间差异很大。
结论:如果尺寸太大(按10 ** 5或更大的顺序),请勿使用循环打印列表。
答案 2 :(得分:0)
list = [1, 2, 3, 4, 5]
for i in list[0:-1]:
print(i, end=', ')
print(list[-1])
执行for循环真的需要更长的时间吗?
试图制作一些将所有str值打印在以逗号分隔的列表中的方法,在最后一个条目之前插入“ and”,并提出了以下建议:
spam = ['apples', 'bananas', 'tofu', 'cats']
for i in spam[0:-1]:
print(i, end=', ')
print('and ' + spam[-1])
答案 3 :(得分:0)
在分隔的列表空间中加入元素:
word = ["test", "crust", "must", "fest"]
word.reverse()
joined_string = ""
for w in word:
joined_string = w + joined_string + " "
print(joined_string.rstrim())