Python:数组和print()格式

时间:2018-07-18 00:49:27

标签: python list format

我正在尝试实现将array_1更改为array_2的功能,以便array_2产生与array_1相同的输出。例如:

for item in array_1: 
    print(item, end ='')

我希望下面的代码产生与上面的代码相同的输出:

for item in array_2:
    print(item) 

array_1 = ["Hello", "World", '\n', '\n', "This", "is", '\n', "a", "textarray"]

通过第一个代码运行此代码可以给我:

HelloWorld

Thisis
atextarray

我应该如何实现将array_1更改为array_2的功能,以便在上面产生相同的输出?

3 个答案:

答案 0 :(得分:2)

由于您真正要寻找的是更改print的默认行为,以使其默认情况下不输出尾随换行符,因此您可以使用functools.partial来制作{{1} }改为默认参数。这样,您无需担心从end=''创建新列表。

array_1

这将输出:

from functools import partial
print = partial(print, end='')
array_1 = ["Hello", "World", '\n', '\n', "This", "is", '\n', "a", "textarray"]
for item in array_1:
    print(item)

答案 1 :(得分:0)

想要什么是不可能的。


首先,请注意反方向会很容易。区别在于array2中的项目在每行之后都用换行符打印,而array1中的项目在每项之后都没有换行打印,因此您要做的就是添加一个{ {1}}至\n中每个项目的末尾。

array_1

您不能只是扭转这种情况。显然没有像array_2 = [item+'\n' for item in array_1] 这样的东西。每个项目碰巧都以item-'\n'结尾,您可以执行\n,但是大多数都不行,并且您不能删除不存在的换行符。

并且无法取消将item[:-1]添加到带有print的字符串之后的换行符。我的意思是,您可以包含一个终端控制序列,以将光标向上移动一行,以便看起来就像执行相同的操作,但实际上并没有执行相同的操作,这很可笑容易破解(在Windows上运行代码,将输出重定向到文件,...)。


您可以关闭漂亮。您从未说过需要元素一对一地对应,所以您可以这样做:

anti-newline

现在您在array_2 = [''.join(array_1)] 中只有一个项目,因此在项目之间打印换行符这一事实无关紧要。


但是,在所有一项之后,最后还有换行符。而且仍然没有办法消除它(因为最后一项不会以您可以删除的array_2结尾)。

所以,这个问题是不可能的。 (一些技巧性问题的答案很短,例如重新定义\n以使您的输出或其他内容特殊化。)

答案 2 :(得分:0)

在程序的开头,为array_1分配了一个值之后,您可以简单地写array_2 = array_1

还要使代码的第一位具有参数x的功能,以便可以将array_1和array_2置于相同的位置。您的最终代码应如下所示:

array_1 = ["Hello", "World", '\n', '\n', "This", "is", '\n', "a", "textarray"]
array_2 = array_1
def arr(x):
    for item in x: 
        print(item, end ='')

然后,您可以在发送此函数时更改放置array_1或array_2的位置。

arr(array_1)
arr(array_2)

这些应该给您相同的值。