0

我有一个列表列表,我想将它打印成多行。但是我必须先将它保存到一个变量中,这意味着我不能只打印外部列表的每个元素。

def __str__(self):
    string = ""
    length = len(self.lst)
    for index in range(length):
        string += str(self.lst[index])
        if (index != length-1):
            string += "\n"
    return string

这似乎不是最好的方法,但它有效。

有什么建议么?

4

5 回答 5

0

这工作正常:

# We supose all elements are strings, otherwise you must apply data transformation
my_list = [['a','b','v'], ['d','e','f'], ['g','h','i'], ['j','k','l']]

# Items separator: comma
sep = ','

# Converting each sublist in string
processed_sublists = [sep.join(item) for item in my_list]

# Lists (lines) separator: \n
sep = '\n'

result = sep.join(processed_sublists)

print(result)

结果:

a,b,v

d,e,f

g,h,我

j,k,l

于 2018-10-19T23:24:54.013 回答
0

你可能会得到你想要的东西join()。例如:

>>> print('\n'.join(', '.join(map(str, range(5))) for _ in range(3)))
0, 1, 2, 3, 4
0, 1, 2, 3, 4
0, 1, 2, 3, 4
于 2018-10-19T22:48:59.157 回答
0

你的整个函数体__str__可以用一行代码替换,如下所示:

def to_string(self):
    return '\n'.join(str(a) for a in self.lst)

__str__正如 Karl 指出的那样,我已经重命名了这个函数,因为你不应该使用你正在做的方式。通常__str__应该返回一个您不介意在控制台上查看的短字符串。

你可能会发现你只to_string在一个地方打电话。一旦您意识到该函数可以用一行替换,您可能希望内联整个表达式而不是进行函数调用。它是惯用的 Python,因此对于有经验的人来说很容易阅读。

于 2018-10-19T22:59:31.947 回答
0

这个怎么样?

class LOL:
    """ List of lists. """
    def __init__(self, data):
        self.lst = data

    def __str__(self):
        return ('[\n' +
                '\n'.join('  ' + repr(sublist) for sublist in self.lst) +
                '\n]')


lol = LOL([['a', 'b', 'c'], ['d', 'e'], [1, 2, 42]])
print(lol)

输出:

[
  ['a', 'b', 'c']
  ['d', 'e']
  [1, 2, 42]
]
于 2018-10-19T23:03:32.117 回答
0

更短一点,更 Pythonic,如果你最后对新行没有问题:

def __str__(self):
    string = ""
    for a_list in self.lst:
        string += str(a_list) + "\n"
    return string
于 2018-10-19T22:53:09.147 回答