我有一个列表列表,我想将其打印成多行。但是我必须先将其保存到变量中,这意味着我不能只打印外部列表的每个元素。
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
这似乎不是最好的方法,但它可以工作。
有什么建议吗?
答案 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