4

我正在尝试使用 打印不带换行符的列表的值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], " ")
4

3 回答 3

9

尝试

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

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

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

在这里,我们使用生成器表达式将列表中的每个项目转换为字符串。

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

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

正如另一个答案中提到的,不要调用你的变量list。您实际上是在隐藏具有相同名称的内置类型。

于 2013-04-30T22:37:59.143 回答
3

你可以做:

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

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

于 2013-04-30T22:38:22.130 回答
0

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

例如: my_list = [1,2,3]

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

输出是:

1 2 35 它将在末尾添加一个数字 (5)。

在这种情况下,最好的解决方案是使用 print 函数,如下所示:

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

输出:1 2 3

于 2020-12-18T12:30:07.303 回答