【问题标题】:Printing an int list in a single line python3在单行python3中打印一个int列表
【发布时间】:2016-10-04 03:49:29
【问题描述】:

我是 python 新手,我正在尝试在一行中扫描多个用空格分隔的数字(我们假设 '1 2 3' 作为示例)并将其添加到 int 列表中。我是这样做的:

#gets the string 
string = input('Input numbers: ') 
#converts the string into an array of int, excluding the whitespaces
array = [int(s) for s in string.split()] 

显然它有效,因为当我输入“1 2 3”并执行print(array) 时,输出是:

[1, 2, 3]

但我想在一行中打印,不带括号,数字之间有空格,如下所示:

1 2 3

我已经尝试过:

for i in array:
    print(array[i], end=" ")

但我得到一个错误:

2 3 Traceback(最近一次通话最后一次):

打印(数组[i], end=" ")

IndexError: 列表索引超出范围

如何在一行中打印整数列表(假设我的前两行代码是正确的),并且没有括号和逗号?

【问题讨论】:

  • i 在您的 for 循环中是数组中的元素而不是索引。

标签: python python-3.x


【解决方案1】:

是的,这在 Python 3 中是可能的,只需在变量前使用 *,例如:

print(*list)

这将打印由空格分隔的列表。

(其中* 是将列表转换为位置参数的解包 运算符,print(*[1,2,3])print(1,2,3) 相同,另请参见What does the star operator mean, in a function call?

【讨论】:

  • 我最终使用了如下print(*list, end="\t")
【解决方案2】:

你想说

for i in array:
    print(i, end=" ")

语法i in array 遍历列表的每个成员。所以,array[i] 试图访问 array[1]array[2]array[3],但最后一个超出范围(array 的索引为 0、1 和 2)。

print(" ".join(map(str,array))) 可以达到同样的效果。

【讨论】:

    【解决方案3】:

    这些都适用于 Python 2.7 和 Python 3.x:

    >>> l = [1, 2, 3]
    >>> print(' '.join(str(x) for x in l))
    1 2 3
    >>> print(' '.join(map(str, l)))
    1 2 3
    

    顺便说一句,array 是 Python 中的保留字。

    【讨论】:

    【解决方案4】:

    尝试在整数的 str 转换上使用 join:

    print(' '.join(str(x) for x in array))
    

    对于 python 3.7

    【讨论】:

    • 这也行,而且更好,因为它在完成打印列表后添加了一个行尾,谢谢!
    【解决方案5】:

    您有多个选项,每个选项都有不同的一般用例。

    第一种方法是使用for 循环,正如您所描述的,但采用以下方式。

    for value in array:
        print(value, end=' ')
    

    您也可以使用str.join 来获得一个简单易读的使用理解的单行符。这种方法很适合将此值存储到变量中。

    print(' '.join(str(value) for value in array))
    

    然而,我最喜欢的方法是将array 传递为*args,将sep 传递给' '。但是请注意,此方法只会产生 printed 输出,而不是可以存储到变量中的值。

    print(*array, sep=' ')
    

    【讨论】:

    • for value in array: print(value, end=' ') 在这种情况下如果数组包含 5 'items' 消息将出现 5 次只需使用 print(*array)
    【解决方案6】:
    # Print In One Line Python
    
    print('Enter Value')
    
    n = int(input())
    
    print(*range(1, n+1), sep="")
    

    【讨论】:

    • 使用星号运算符是一个聪明的解决方案。但是请注意,该问题实际上使用了一个已回答的任意列表,而您的答案使用了从 1 到单个输入的范围。此外,您可能打算使用 sep=" " 而不是 sep=""
    【解决方案7】:

    对于 python 2.7,另一个技巧是:

    arr = [1,2,3]
    for num in arr:
      print num,
    # will print 1 2 3
    

    【讨论】:

      【解决方案8】:

      如果你写

      a = [1, 2, 3, 4, 5]
      print(*a, sep = ',')
      

      你会得到这个输出:1,2,3,4,5

      【讨论】:

        【解决方案9】:

        你可以在 print 中使用更多的“end”元素:

        for iValue in arr:
           print(iValue, end = ", ");
        

        【讨论】:

          【解决方案10】:

          也许这段代码会对你有所帮助。

          >>> def sort(lists):
          ...     lists.sort()
          ...     return lists
          ...
          >>> datalist = [6,3,4,1,3,2,9]
          >>> print(*sort(datalist), end=" ")
          1 2 3 3 4 6 9
          

          您可以使用一个空列表变量来收集用户输入,方法是 append()。 如果你想在一行中打印列表,你可以使用print(*list)

          【讨论】:

            猜你喜欢
            • 2020-09-26
            • 2022-12-18
            • 1970-01-01
            • 2020-02-26
            • 2016-07-29
            • 2013-04-30
            • 2016-12-16
            • 2018-08-11
            • 1970-01-01
            相关资源
            最近更新 更多