Как правильно имплементировать метод __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
→ Ссылка