【问题标题】:Print range of numbers on same line在同一行上打印数字范围
【发布时间】:2013-08-27 19:23:13
【问题描述】:

使用 python 我想在同一行打印一系列数字。我如何使用 python 来做到这一点,我可以通过不添加 \n 来使用 C 来做到这一点,但是我该如何使用 python 来做到这一点。

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

我正在努力得到这个结果。

1 2 3 4 5 6 7 8 9 10

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:
    >>>print(*range(1,11)) 
    1 2 3 4 5 6 7 8 9 10
    

    Python 一行打印范围

    【讨论】:

    • 很好的答案。 * 究竟是什么意思?
    • @majom * 解压序列。
    • 谢谢。我明白了。您知道* 文档的链接吗?这很难用谷歌搜索。
    • *的用法有几个线程。你可以参考here
    【解决方案2】:

    Python 2

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

    Python 3

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

    【讨论】:

    • 这是一个非常简单的解决方案!但是,这与其他人提供的更复杂的解决方案有什么区别?答案已接受!
    • 所以,“print x”只是在进行一系列打印时转义换行符的简写方式。您的打印在 for 循环中,所以这是有道理的。下面,string.join 方法接受一个可迭代对象并将每个元素与提供的字符串组合并返回一个字符串。因此,您不是在没有换行符的情况下进行多次打印,而是使用换行符进行一次打印;只需将所有可打印元素预编译成一个字符串。
    • 谢谢,回答了我的问题。
    【解决方案3】:
    for i in range(10):
        print(i, end = ' ')
    

    您可以为结束字段提供任何分隔符(空格、逗号等)

    这适用于 Python 3

    【讨论】:

      【解决方案4】:

      str.join 在这种情况下是合适的

      >>> print ' '.join(str(x) for x in xrange(1,11))
      1 2 3 4 5 6 7 8 9 10 
      

      【讨论】:

        【解决方案5】:

        这是一个老问题,xrange 在 Python3 中不受支持。

        你可以试试——

        print(*range(1,11)) 
        

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

        【讨论】:

          【解决方案6】:

          同样可以使用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 导入的标准输出,第二个是将字符串与 lambda 和覆盖的保留函数连接起来。你为什么不使用' '.join()??这两个都是不好的做法。
          • @BlakeVandeMerwe 我试图介绍可能的方法。
          【解决方案7】:
          [print(i, end = ' ') for i in range(10)]
          0 1 2 3 4 5 6 7 8 9
          

          这是一个与@Anubhav 相同的列表理解方法

          【讨论】:

          • 这不必要地创建了一个列表
          • 在 Python 3 中,最好使用 print 中的解压列表:print(*[i for i in range(10)], sep=" ") 这样可以避免创建@OneCricketeer 提到的空列表
          • @AldoBassanini 这也创建了一个列表......你也不需要i for i in。只需print(*range(10))
          • @OneCricketeer range 对象在解压时不会创建内部列表?
          • @AldoBassanini Python3中的生成器
          【解决方案8】:
          for i in range(1,11):
              print(i)
          

          我知道这是一个老问题,但我认为现在可行

          【讨论】:

          • 不,它没有!默认情况下,Python 3 打印函数和 Python 2 打印语句都隐式添加换行符。
          【解决方案9】:

          另一个单行 Python 3 选项,但带有显式分隔符:

          print(*range(1,11), sep=' ')

          【讨论】:

          • 你能解释一下它是如何工作的吗,范围前的 * 是什么。
          • @VijenderKumar 这将打印 1 到 10,由您在 sep 属性中输入的任何字符串分隔。在上面的示例中,每个整数字符串都用空格分隔。
          • @VijenderKumar 那只是python参数定位。
          【解决方案10】:
          n = int(input())
          for i in range(1,n+1):
              print(i,end='')
          

          【讨论】:

          • 为什么这比公认的答案更好,或者与确切建议的答案不同?
          • 欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
          【解决方案11】:

          在打印函数内部使用end = " "

          代码:

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

          【讨论】:

            【解决方案12】:

            虽然已经给出了问题的答案。我想补充一下,如果我们需要打印没有空格的数字,那么我们可以使用以下代码

                    for i in range(1,n):
                        print(i,end="")
            

            【讨论】:

              【解决方案13】:

              这是一个可以处理 x 单行或多行的解决方案,例如 scipy pdf:

              from scipy.stats import multivariate_normal as mvn
              
              # covariance matrix
              sigma = np.array([[2.3, 0, 0, 0],
                         [0, 1.5, 0, 0],
                         [0, 0, 1.7, 0],
                         [0, 0,   0, 2]
                        ])
              # mean vector
              mu = np.array([2,3,8,10])
              
              # input
              x1 = np.array([2.1, 3.5, 8., 9.5])
              x2 = np.array([[2.1, 3.5, 8., 9.5],[2.2, 3.6, 8.1, 9.6]])
              
              
              def multivariate_normal_pdf(x, mu, cov):
                  x_m = x - mu
              
                  if x.ndim > 1:
                      sum_ax = 1
                      t_ax = [0] 
                      t_ax.extend(list(range(x_m.ndim)[:0:-1])) # transpose dims > 0
                  else:
                      sum_ax = 0
                      t_ax = range(x_m.ndim)[::-1]
              
              
                  x_m_t = np.transpose(x_m, axes=t_ax) 
                  A = 1 / ( ((2* np.pi)**(len(mu)/2)) * (np.linalg.det(cov)**(1/2)) )
                  B = (-1/2) * np.sum(x_m_t.dot(np.linalg.inv(cov)) * x_m,axis=sum_ax)
                  return A * np.exp(B)
              
              print(mvn.pdf(x1, mu, sigma))
              print(multivariate_normal_pdf(x1, mu, sigma))
              
              print(mvn.pdf(x2, mu, sigma))
              print(multivariate_normal_pdf(x2, mu, sigma))
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-01-24
                • 1970-01-01
                • 2013-12-07
                • 1970-01-01
                • 1970-01-01
                • 2020-06-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多