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

2024-05-19 03:02:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在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函数支持?


Tags: 函数答案代码in元素列表for数字
3条回答

虽然接受的答案是绝对明确的,我只是想检查效率方面的时间。

最好的方法是打印转换为字符串的数字连接字符串。

print(" ".join(list(map(str,l))))

请注意,我使用了map而不是loop。 我写了四种不同的时间比较方法的代码:

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")

结果:

Time 74344.76 71790.83 196.99 153.99

结果让我很吃惊。“loop method”和“joined string method”情况下的时间差异很大。

结论:如果尺寸过大(按10*5或更大的顺序),不要使用循环打印列表。

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

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中的任何非字符串值,这需要手动转换为字符串!

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])

相关问题 更多 >

    热门问题