Ниже немного модифицированная версия кода, но читает гораздо чище и проще понять:
def flatten(val):
print('--------', val, '----------')
o = []
for thing in val:
print(thing, type(thing))
if isinstance(thing, int):
o.append(thing)
if isinstance(thing, list):
for a_thing in thing:
if isinstance(a_thing, int):
o.append(a_thing)
return o
if __name__ == '__main__':
result = flatten([0, [1], 2])
print result
[0, 1, 2]
Некоторые предложение: Хотя этот скрипт может быть хорошо для экспериментов, однако в конечном итоге вам может понадобиться recursion решать такие проблемы. Рекурсивные функции - это своего рода функция, которая вызывает себя, чтобы выполнить задание. Заданный вопрос: что, если ваш входной массив содержит [0, [1,2,3], [4]]? В этом случае вам понадобится вложенный цикл для решения проблемы. Проблема становится более сложной, когда ваш ввод выглядит следующим образом: [0, [1,2, [3, 4]], [5]]. В таких случаях используются рекурсивные функции.
Вот как рекурсивная функция может решить эту проблему:
def flatten(*args):
number_list = []
for item in args:
if isinstance(item, int):
number_list.append(item)
else:
number_list += flatten(*item)
return number_list
if __name__ == '__main__':
print flatten([0, [1, 2, [3, 4, 5]], 6])
[0, 1, 2, 3, 4, 5, 6]
Это одна из exercism .io упражнений, и я думаю, что рекурсия является точкой этого урока. – Eman
BTW, если решение было полезным, пожалуйста, не забудьте принять его! :) – Raptor