Python – Итерирование любого типа структуры списка

Извините, если на это уже был дан ответ, я очень новичок в python, я хорошо осмотрелся и нашел здесь эту страницу, которая немного помогла мне, но я все еще застрял.

Я пытаюсь получить любой тип ввода для работы в моем скрипте, у меня есть работа для одного элемента и списка элементов, но мне трудно заставить его работать для списка списков.

Я редактировал код в соответствии с комментариями, чтобы сделать немного больше смысла:

Input = [[1,2,3],[4,5,6],[7,8,9]] if isinstance(Input, list): Input = Input else: Input = [Input] listout = [] for x in Input: listout.append(x+2) print (listout) 

возвращает: строка 12, в listout.append (x + 2) TypeError: может только список конкатенации (а не «int») в список

Это работает, например, если Input = 1 или Input = [1,2,3,4], но не для вышеуказанного.

Я бы хотел, чтобы результат выглядел следующим образом: список списков:

 [[3,4,5],[6,7,8],[9,10,11]] 

Сначала я попытался сделать плоский список из вложенных списков, но я хотел бы сохранить структуру списка для вывода.

Спасибо всем за чтение,

TJ

Вы можете рассмотреть numpy :

 >>> import numpy as np >>> a=np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a+=2 >>> a array([[ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) >>> a.tolist() [[3, 4, 5], [6, 7, 8], [9, 10, 11]] 

Если вы не можете использовать numpy, вам нужно будет написать рекурсивную процедуру для произвольной вложенности:

 def nested_sum(e,n): if isinstance(e, list): return [nested_sum(x, n) for x in e] else: return e+n >>> nested_sum([1,[2,3],[4,5,6],[7,[8],9]], 2) [3, [4, 5], [6, 7, 8], [9, [10], 11]] 

Если у вас только два уровня вложенности (как в примере), вы можете сделать следующее:

 >>> li=[[1,2,3],[4,5,6],[7,8,9]] >>> [[e+2 for e in sl] for sl in li] [[3, 4, 5], [6, 7, 8], [9, 10, 11]]