Форум сайта python.su
0
Можете объяснить простым языком код?
Я понял, что переменная n содержит два списка 1, 2, 3, 4, 5, 6, 7, 8, 9
Существует функция flatten с аргументом lists
Переменная result равна пустому списку что бы туда занести значение
Цикл for элемента lst в аргументе lists (непонимаю)
n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]
def flatten(lists):
result = []
for lst in lists: # ??? lists (1 2 3 4 5 6 7 8 9)
for item in lst: # ??? lst (1 2 3 4 5 6 7 8 9)
result.append(item) # ??? (добавить к result item)
return result
print flatten(n)
Отредактировано studdef (Апрель 7, 2016 21:37:25)
Офлайн
5
В функции два вложенных цикла.
В первом цикле происходит обход по списку lists, т.е. 1-й элемент будет:
[1, 2, 3]
1, 2, 3
[4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Отредактировано r00tl3ss (Апрель 8, 2016 00:28:49)
Офлайн
857
Тут упростил.
Офлайн
2
Вообще код немного странноватый: раскрыть списки можно одной строкой, если это список списков, а если нет - то этот код работать не будет.
Могу порекомендовать вот это.
Flatten для списков в списке:
>>> list_of_items = [[1,2], [3], []] >>> import itertools >>> chain = itertools.chain(*list_of_items) # Chain раскрывает внутренние списки >>> print(list(chain)) [1, 3, 4]
list_of_items = [[1, [2]], [3, [[4]]], [], [5, [6, 7]]] def iter_flatten(root): if isinstance(root, (list, tuple, set)): # если root - это список, кортеж или множество for element in root: # перебираем элементы из итеррируемого элемента for e in iter_flatten(element): # вызываем саму себя и перебираем элементы yield e # возвращаем элемент else: # если root не список, не кортеж и не множество yield root # возвращаем элемент
print list(iter_flatten(list_of_items)) # Вернет [1, 2, 3, 4, 5, 6, 7]
Отредактировано Razor (Апрель 8, 2016 06:13:03)
Офлайн
221
Razor
он не странный, он учебный начального уровня.
Офлайн
0
+ да он учебный.
Только вот я не понял
В функции два вложенных цикла. <- эта понятно
В первом цикле происходит обход по списку lists, т.е. 1-й элемент будет:
[1, 2, 3]
for lst in lists: # 1 2 3 здесь for item in lst: # ??? lst # а здесь 1 2 3 4 5 6 7 8 9 result.append(item) # внести все значения элемента item в список result ?
Отредактировано studdef (Апрель 8, 2016 18:54:15)
Офлайн
16
Когда я только столкнулся с программированием, понять такие вещи мне помогли задачи на циклы, а еще вот этот ресурс
Офлайн
0
Strightну эта и есть задача, просто я ее решил с подсказками и по аналогии других уроков, а код плохо понял. за ссылку спасибо хороший ресурс)
Когда я только столкнулся с программированием, понять такие вещи мне помогли задачи на циклы, а еще вот этот ресурс
Отредактировано studdef (Апрель 8, 2016 21:42:07)
Офлайн
0
Еще хотел воспользоваться случаем и узнать. Как изменить код, если я хочу добавить не все цифры, а к примеру какие то конкретные? (к примеру 3, 5, 7 или 1, 7)
Офлайн
5
Можно про условный оператор if почитать.
Добавить его нужно во второй цикл.
Офлайн