Как правильно имплементировать метод __str__ для класса?
Помогите найти ошибку в коде. Существует класс с атрибутом self.lst: List[List[str]]
Нужно вернуть строку высотой равной количеству внутренних списков и шириной равной количеству элементов во внутренних списках.
def __str__(self) -> str:
"""
>>> self.lst = [['1', '-', '2'], ['3', '-', '-']]
>>> print(self.lst)
1-2
3--
>>> str(lst)
>>> '1-2\\n3--'
"""
mystr = ''
for l in self.lst:
for i in l:
if l.index(i) != len(l) - 1:
mystr= mystr + i
elif l.index(i) == len(l) - 1:
mystr = mystr + i + '\n'
return mystr
В этом коде метод возвращает только '1-23--'
Ответы (2 шт):
Автор решения: taycants
→ Ссылка
for l in self.lst:
for i in range(len(l)):
if i != len(l) - 1:
mystr= mystr + l[i]
elif i == len(l) - 1 and l != self.lst[-1]
mystr = mystr + l[i] + '\n'
elif i == len(l) - 1 and l == self.lst[-1]
mystr = mystr + l[i]
Автор решения: Dmitry
→ Ссылка
Без лишних заморочек и подсчетов длин строк. Для тестов создам и класс:
class Ls:
def __init__(self, lst):
self.lst = lst
def __str__(self) -> str:
result =[]
for item in self.lst:
result.append(''.join(item))
return '\n'.join(result)
Протестируем
lists = {1:[],
2:[['1', '-', '2'], ['3', '-', '-']],
3: [['1', '-', '2'], ['3', '-', '-'],['1', '-', '2']]}
for key, value in lists.items():
l_obj = Ls(value)
print(f"Test number {key}.\n{l_obj}")
вывод
Test number 1.
Test number 2.
1-2
3--
Test number 3.
1-2
3--
1-2