Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 8, 2017 10:50:36

Timafei.sosnin
Зарегистрирован: 2017-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает бесконечный вложеный список

 def clearlist(mass,out=[]):
    for qwe in mass:
        if (type(qwe)==list):
            out.append(clearlist(qwe))
        else:
            if not(qwe in out):
                out.append(qwe)
    return(out)
если передавать без вложенного то всё отлично пример:
 w=[1,2,3,4,1,1,23,12,12,21]
w=clearlist(w)
возвращает:
 [1, 2, 3, 4, 23, 12, 21]
А если есть вложенный то всё становится веселей:
 w=[1,2,3,4,1,1,23,12,12,21,['a','a','s']]
[1, 2, 3, 4, 23, 12, 21, 'a', 's', [...]]

Отредактировано Timafei.sosnin (Окт. 8, 2017 13:04:46)

Офлайн

#2 Окт. 8, 2017 13:18:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Функция возвращает бесконечный вложеный список

Timafei.sosnin
Передавать список дефолтным параметром - плохая идея. Это может работать не так, как вы ожидаете. Дело в том, что объект функции создается один раз, и дефолтное значение устанавливается один раз, а дальше используется указатель на одно и то же значение
Попробуйте запустить

 def foo(l=[]):
    l.append(1)
    print(l)
foo(l=[7])
foo()
foo()
foo()



Офлайн

#3 Окт. 8, 2017 13:40:21

Timafei.sosnin
Зарегистрирован: 2017-09-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает бесконечный вложеный список

FishHook
С твоего ответа не чего честно говоря не понял кроме того что:

FishHook
Передавать список дефолтным параметром - плохая идея

поискал и нашел решение
 def clearlist(mass,out=None):
    if (out==None):
        out=[]
    for qwe in mass:
        if (type(qwe)==list):
            out.append(clearlist(qwe))
        else:
            if not(qwe in out):
                out.append(qwe)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version