在同一行上打印数字范围

37

我想使用Python在同一行上打印一系列数字。我该如何使用Python实现这个功能?在C语言中,我可以通过不添加\n 来实现这一点,但是在Python中该怎么做呢?

for x in xrange(1,10):
    print x

我正在尝试获得这个结果。

1 2 3 4 5 6 7 8 9 10
14个回答

79
>>>print(*range(1,11)) 
1 2 3 4 5 6 7 8 9 10

用一行Python代码打印范围


7
好的回答。* 的实际意义是什么? - majom
7
@majom的 * 解包序列。 - voidpro
谢谢。我明白了。你知道 * 的文档链接吗?这个很难在谷歌上搜索到。 - majom
4
关于*符号的用法有一些讨论。您可以参考这里(https://dev59.com/0mw05IYBdhLWcg3w41sp)来了解更多信息。 - voidpro

43

Python 2

for x in xrange(1,11):
    print x,

Python 3

for x in range(1,11):
    print(x, end=" ") 

这是一个非常简单的解决方案!但是与其他人提供的更复杂的解决方案有什么区别呢?答案已被接受! - kyle k
1
因此,“print x”只是在进行一系列打印时避免换行的简写方式。你的打印语句在一个for循环中,所以这样做很有意义。下面,string.join方法接受一个可迭代对象,并将每个元素与提供的字符串组合起来返回一个单独的字符串。因此,你不需要多次打印没有换行符的内容,而是将所有可打印元素预先编译成一个字符串,然后进行一次带有换行符的打印。 - blakev

11
for i in range(10):
    print(i, end = ' ')
你可以提供任何分隔符来结束字段(空格、逗号等)。
这是针对Python 3的。

9
在这种情况下,str.join 是合适的。
>>> print ' '.join(str(x) for x in xrange(1,11))
1 2 3 4 5 6 7 8 9 10 

3
这是一个老问题,Python3不支持xrange。你可以尝试使用 -
print(*range(1,11)) 

或者

for i in range(10):
    print(i, end = ' ')

1
[print(i, end = ' ') for i in range(10)]
0 1 2 3 4 5 6 7 8 9

这是与@Anubhav相同的列表推导式答案的方法。

这会不必要地创建一个列表。 - OneCricketeer
在Python 3中,最好在print内使用未打包的列表:print(*[i for i in range(10)], sep=" ")这样可以避免@OneCricketeer提到的空列表的创建。 - Aldo Bassanini
@AldoBassanini 这也会创建一个列表... 你也不需要 i for i in。只需 print(*range(10)) - OneCricketeer
@OneCricketeer range对象在解包时不会创建内部列表吗? - Aldo Bassanini
@AldoBassanini 这是Python3中的生成器。 - OneCricketeer

1
可以通过使用 stdout 实现相同的效果。
>>> from sys import stdout
>>> for i in range(1,11):
...     stdout.write(str(i)+' ')
...
1 2 3 4 5 6 7 8 9 10 

另外,也可以使用 reduce() 来实现相同的功能:

>>> xrange = range(1,11)
>>> print reduce(lambda x, y: str(x) + ' '+str(y), xrange)
1 2 3 4 5 6 7 8 9 10
>>>

这么简单的问题却有如此复杂的解决方案。而且,这两个方法都无法转义换行符,第一个需要从sys中导入stdout,第二个则使用lambda和重写保留函数来连接字符串。为什么不使用' '.join(<list>)呢?这两种方法都是不好的实践。 - blakev
@BlakeVandeMerwe 我正在尝试覆盖所有可能的方式。 - subhash kumar singh

0
尽管已经回答了这个问题,但是我想补充一点,如果我们需要打印不带任何空格的数字,则可以使用以下代码。
        for i in range(1,n):
            print(i,end="")

0

对于Python 3:

for i in range(1,10): 
    print(i,end='')

0
n = int(input())
for i in range(1,n+1):
    print(i,end='')

1
为什么这个答案比被接受的回答更好,或者与建议完全相同的答案不同? - RalfFriedl
1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - double-beep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接