将列表列表保存为多行字符串的正确方法?

时间:2018-10-19 22:37:03

标签: python

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

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

这似乎不是最好的方法,但它可以工作。

有什么建议吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

更短更短一些的Python语言,如果您最后对换行没有问题:

def __str__(self):
    string = ""
    for a_list in self.lst:
        string += str(a_list) + "\n"
    return string

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分: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]
]

答案 4 :(得分: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,i

         

j,k,l