Вложенный список и количество () - дополнительный вопрос - PullRequest
0 голосов
/ 11 сентября 2018

Ссылка на оригинальный вопрос: Вложенный список и число ()

Я проверял принятый код ответа и обнаружил, что он не работает для списка, содержащего строки.

Код принятого ответа:

def flatten(seq,container=None):
    if container is None:
        container = []
    for s in seq:
        if hasattr(s,'__iter__'):
            flatten(s,container)
        else:
            container.append(s)
    return container

c = flatten([(1,2),(3,4),(5,[6,7,['a','b']]),['c','d',('e',['f','g','h'])]])
print c
print c.count('g')

d = flatten([[[1,(1,),((1,(1,))), [1,[1,[1,[1]]]], 1, [1, [1, (1,)]]]]])
print d
print d.count(1)

Сначала я проверил, используя этот ввод:

list1 = [[[1,2,3,4,5],[1,2,3,4,5]],[[1,2,3,4,5],[1,2,3,4,5]],[[1,2,3,4,5],[1,2,3,4,5]]]

И это сработало.

Но как только я воспользуюсь этим:

list1 = [[[1,'2',3,4,5],[1,2,3,4,5]],[[1,2,3,4,5],[1,2,3,4,5]],[[1,2,3,4,5],[1,2,3,4,5]]]

Примечание: первые 2 теперь являются строками.

Выдает эту ошибку:

RecursionError: maximum recursion depth exceeded

Я понимаю рекурсию, но не понимаю, почемуошибка случается.Изначально я думал, что это как-то связано с ' __ iter __ ', но я уверен, что строки итеративны, потому что я проверил.

Для справки, я использую Python 3.6.4.

И я все еще новичок в Python, пожалуйста, будьте добры ко мне:)

1 Ответ

0 голосов
/ 11 сентября 2018

Строки являются проблемой для этой flatten функции, потому что они повторяемы, но когда вы выполняете итерацию внутри строки, вы всегда получаете другую строку. Даже одна символьная строка остается итеративной и дает копию самого себя (еще одна символьная строка).

Так что вам нужно поменять чек на то, должны ли вы проходить курс лечения или нет. Вместо того, чтобы повторять каждый раз, когда вы находите повторяемый объект, вам нужно специально исключить строки:

if hasattr(s,'__iter__') and not isinstance(s, str):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...