首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打印以空格分隔的元素列表

打印以空格分隔的元素列表
EN

Stack Overflow用户
提问于 2014-03-21 18:38:56
回答 4查看 152.8K关注 0票数 43

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

在Python2中,这可以通过以下代码轻松完成。print语句的实现(我必须承认,这很神秘)避免了在换行符之前打印额外的空格。

代码语言:javascript
复制
L = [1, 2, 3, 4, 5]
for x in L:
    print x,
print

然而,在Python3中,似乎(假设)使用print函数的等效代码会在最后一个数字后产生一个空格:

代码语言:javascript
复制
L = [1, 2, 3, 4, 5]
for x in L:
    print(x, end=" ")
print()

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

代码语言:javascript
复制
L = [1, 2, 3, 4, 5]
print(" ".join(str(x) for x in L))

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

代码语言:javascript
复制
L = [1, 2, 3, 4, 5]
for i, x in enumerate(L):
    print(" " if i>0 else "", x, sep="", end="")
print()

但这又一次比我在Python2中的情况更糟糕。

所以,我的问题是,我是不是在Python 3中遗漏了什么?print函数是否支持我要查找的行为?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-21 18:41:59

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

代码语言:javascript
复制
print(*L)

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

代码语言:javascript
复制
>>> 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()

代码语言:javascript
复制
joined_string = ' '.join([str(v) for v in L])
print(joined_string)
# do other things with joined_string

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

票数 129
EN

Stack Overflow用户

发布于 2019-02-19 03:47:13

虽然公认的答案是绝对清楚的,但我只是想检查时间方面的效率。

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

代码语言:javascript
复制
print(" ".join(list(map(str,l))))

请注意,我使用了映射而不是循环。我用4种不同的方式写了一小段代码来比较时间:

代码语言:javascript
复制
import time as t

a, b = 10, 210000
l = list(range(a, b))
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或更大),请不要使用循环打印列表。

票数 4
EN

Stack Overflow用户

发布于 2018-10-09 19:45:30

代码语言:javascript
复制
list = [1, 2, 3, 4, 5]
for i in list[0:-1]:
    print(i, end=', ')
print(list[-1])

for循环的运行时间真的要长得多吗?

我试图制作一种打印列表中的所有字符串值的东西,用逗号分隔,在最后一个条目之前插入" and“,并得出了以下结果:

代码语言:javascript
复制
spam = ['apples', 'bananas', 'tofu', 'cats']
for i in spam[0:-1]:
    print(i, end=', ')
print('and ' + spam[-1])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22556449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档