Форум сайта python.su
39
Я все прекрасно понял. Это Вы не поняли меня…
Kon52
Просто мне кажется, что чел, писавший эту функцию, понимал что он делает и для чего..

Офлайн
3
4kpt_IIIАга, только никто так и не раскрыл великую тайну- почему?
Это плохо и за это можно получить по шапке.
Офлайн
39
Kon52
Ага, только никто так и не раскрыл великую тайну- почему?
Офлайн
3
4kpt_IIIТам ещё такой вариант был:
Код получается сложночитаемым, неоднозначным и можно выхватить неожиданные и трудноотлавливаемые ошибки.
merge = lambda lst: reduce(lambda a, b: a.extend(merge(b)) or a if isinstance(b, list) else a.append(b) or a, lst, [])
Офлайн
39
Kon52
Какой на Ваш взгляд оптимальный вариант для решения задачи по разворачиванию такого списка?
Офлайн
39
Или передавайте или используйте полноценно mutable. Короче, держите 
Вариант раз.
def open_list(list_from): accumulator = [] for elem in list_from: if not isinstance(elem, list): accumulator.append(elem) else: accumulator.extend(open_list(elem)) return accumulator # a = [1, 2, [3, 4], [5, [6, 7]]] print(open_list(a))
def open_list(list_from): accumulator = [] for elem in list_from: if not isinstance(elem, list): accumulator += [elem] else: accumulator += open_list(elem) return accumulator # a = [1, 2, [3, 4], [5, [6, 7]]] print(open_list(a))
Отредактировано 4kpt_III (Окт. 25, 2015 01:31:50)
Офлайн
24
Херово это потому, что функция не должна иметь состояния. Ее результат в любой части программы должен зависеть только от переданных аргументов.
Отредактировано ayb (Окт. 25, 2015 08:09:29)
Офлайн
253
Вообще правильное решение применить “встроенную” функцию flatten. Однако в сообществе длительное время идет война сторонников и противников рекурсивного flatten (одноуровневый flatten это concat).
http://programmers.stackexchange.com/questions/254279/why-doesnt-python-have-a-flatten-function-for-lists
И на этом форуме flatten обсуждается регулярно. Я думаю что отказ от flatten в стандартной библиотеке большая глупость. В питоне не очень часто использую (хотя для себя конечно ее написал). Но в Wolfram mathematica не было ни одной программы без flatten. Если она появится в любом виде то точно будет востребована.
Вариант
http://code.activestate.com/recipes/577255-flatten-a-list-or-list-of-lists-etc/
мне кажется лучше чем
isinstance(elem, list)
Отредактировано doza_and (Окт. 25, 2015 08:33:07)
Офлайн