在Python中打印没有换行符(但带空格)的列表

时间:2013-04-30 22:36:30

标签: python python-2.7

我正在尝试使用sys.stdout.write()打印不带换行符的列表值。它工作得很好,但唯一的问题是我想要将每个值与另一个值隔开。换句话说,我想要123而不是1 2 3。我在网站上查找了一个解决方案,但我还没有找到涉及列表的内容。

当我将" "添加到sys.stdout.write(list[i])时,如下所示:sys.stdout.write(list[i], " "),它根本不打印。任何建议如何解决?

这是我的代码:

import random
import sys

list = []

length = input("Please enter the number of elements to be sorted: ") 
randomNums = input("Please enter the number of random integers to be created: ") 
showList = raw_input("Would you like to see the unsorted and sorted list? y/n: ")

for i in range(length):
    list.append(random.randint(1,randomNums))

if(showList == "y"):
    for i in range(length):
       sys.stdout.write(list[i], " ")

3 个答案:

答案 0 :(得分:6)

尝试

sys.stdout.write(" ".join(list))

以上内容仅在list包含字符串时有效。使其适用于任何列表:

sys.stdout.write(" ".join(str(x) for x in list))

在这里,我们使用generator expression将列表中的每个项目转换为字符串。

如果您的列表很大并且您想避免为其分配整个字符串,则以下方法也可以使用:

for item in list[:-1]:
    sys.stdout.write(str(item))
    sys.stdout.write(" ")
if len(list) > 0:
    sys.stdout.write(list[-1])

正如其他答案所述,请勿调用变量list。您实际上是在使用相同名称隐藏内置类型。

答案 1 :(得分:3)

你可以这样做:

sys.stdout.write(" ".join(my_list))

此外,最好不要为变量list命名,因为Python已经有一个名为list的内置类型。因此,这就是我将您的变量重命名为my_list的原因。

答案 2 :(得分:0)

在Python3中,我尝试了上述解决方案,但是得到了一个奇怪的输出:

例如: 5

my_list = [1,2,3]

输出为:

sys.stdout.write(" ".join(str(x) for x in ss)) 它将在末尾添加一个数字(5)。

在这种情况下,最好的解决方案是使用打印功能,如下所示:

1 2 35

输出:print(" ".join(str(x) for x in ss), file=sys.stdout)