Как читать/записать вложенный список в python?

0. Как создать вложенный список 5x5: например, такой list [5][5] -> понятно:

lst=[5],[5]

1. Как записать одно значение -> понятно:

lst=[5],[5]
lst[0][0]='123'
lst[1][2]='1234567'

2. Как итерировать, читая вложенный список -> понятно:

lst=[5],[5]
for y in range (0, 4):
        for x in range(0, 4):                
            Value=lst[y][x]
            print(Value)

3. Как заполнить вложенный лист, его итерируя по элементам -> не понятно:

lst=[5],[5]
for x in range (5)
    for y in range(5)
        lst[x][y].insert(Value) #здесь не работает приёмчик
print(lst)

Ответы (3 шт):

Автор решения: MBo

К сожалению, у вас многое неправильно.

Не называйте переменную именем встроенного типа.

Эта конструкция list=[5],[5] НЕ создает список 5x5, а делает два списочка по одному элементу со значением 5, и объединяет их в кортеж (tuple)

Чтобы создать двумерный список, можно использовать списковое включение (я сделал покороче)

lst = [[0]*3 for _ in range(3)]

или поэлементно добавляя одномерные списки

 lst = []
 for i in range(3):
    lst.append([0]*3)

Если вы хотите добавлять элементы к подспискам, то это делается append-ом к элементам первого уровня

lst[2].append(6)

P.S. При сомнениях в правильности получаемых структур просто печатайте их print-ом

[[0, 0, 0], [0, 0, 0], [0, 0, 0, 6], [0, 0, 0], [0, 0, 0]]
→ Ссылка
Автор решения: Arthur Alunts

Мой дивный друг, вот что получилось:

lst=[]  #Создаем лист, пока без размера для 2D
lst0=[] #Создаем лист, пока без размера для 3D

def Create_2D_List(X,Y): #Создаем функцию создания листа с размерностью (X)*(Y)
    global lst
    lst = [[0]*X for _ in range(Y)]
    
def Create_3D_List(X,Y,Z):#Создаем функцию создания листа с размерностью (X)*(Y)*(Z)
    global lst0
    lst0 =[[[0]*X for i in range(Y)] for j in range(Z)]

def Fill_2D_List():#Заполняем 2D-лист: lst стандартными значениями
    global lst
    X = len(lst)
    Y = len(lst[0])
    for x in range(X):
        for y in range(Y):
            lst[x][y]=str (x)+' '+ str(y) #стандартное сзначение 
      
def Fill_3D_List(): #Заполняем 3D-лист: lst0 стандартными значениями
    global lst0
    X = len(lst0)
    Y = len(lst0[0])
    Z = len(lst0[0][0])
    for x in range(X):
        for y in range(Y):
            for z in range(Z):
                lst0[x][y][z]=str (x)+ str(y) + str(z)#стандартное сзначение 


Create_2D_List(4,7)   #Создали массив 2D 4*7
Create_3D_List(2,4,8) #Создали массив 3D 2*4*8
Fill_2D_List()        #Заполинили 2D массив
Fill_3D_List()        #Заполинили 3D массив

lst[0][0]='MyValue_2D'#Наполинили 2D массив
lst0[0][0]='MyValue_3D'#Наполинили 2D массив

print(lst)                   #Отобразили в консоле массив
print('=-----------------=') #Отобразили в консоле массив
print(lst0)                  #Отобразили в консоле массив
→ Ссылка
Автор решения: Stanislav Volodarskiy

Кажется я понял чего вы хотите. make_nlist создаёт вложенный список по списку размеров. Например make_nlist([2, 3]) создаст "двумерный" список размера 2×3:

def make_nlist(dim):
    if len(dim) == 0:
        return None
    head, *tail = dim
    return [make_nlist(tail) for _ in range(head)]

fill_nlist(nlist, cb) заполняет вложенный список значениями. Значения вычисляются в функции cb, в которую передаётся кортеж из индексов:

def fill_nlist(nlist, cb):

    def traverse(index, nlist):
        for i, v in enumerate(nlist):
            if isinstance(v, list):
                traverse(index + (i, ), v)
            else:
                nlist[i] = cb(index + (i, ))

    traverse((), nlist)

Пример использования:

import pprint


pprint.pprint(make_nlist([2, 3]))

a = make_nlist([2, 3, 4])
pprint.pprint(a)

fill_nlist(a, lambda index: ''.join(map(str, index)))
pprint.pprint(a)
$ python nlist.py
[[None, None, None], [None, None, None]]
[[[None, None, None, None], [None, None, None, None], [None, None, None, None]],
 [[None, None, None, None], [None, None, None, None], [None, None, None, None]]]
[[['000', '001', '002', '003'],
  ['010', '011', '012', '013'],
  ['020', '021', '022', '023']],
 [['100', '101', '102', '103'],
  ['110', '111', '112', '113'],
  ['120', '121', '122', '123']]]
→ Ссылка