Вложенные списки в python?

Рейтинг: 0Ответов: 3Опубликовано: 27.04.2023
  1. Как создать вложенный список 5x5: и добавить в него значение "MyValue", например, так?:

    list[4][4]="MyValue"

  2. Как считать значение вложенного списка в переменную?

    Str=list[4][4]

  3. Как итерировать по элементам вложенного списка в цикле(или во вложенном цикле)?

Ответы

▲ 7Принят

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

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

Эта конструкция 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]]
▲ 0

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

ls=[0]*10 #Создаем лист, 1D (одномерный) из 10 элементов
lst=[]    #Создаем лист, пока без размера (в будущем 2D list)
lst0=[]   #Создаем лист, пока без размера (в будущем 3D list)

ls.append("11") #добавляем в конец списка ls элемент со значением "11", даже если элемента нету
ls.insert(8,"888") #добавляем в середину списка ls в 7-ю строчку элемент со значением "888"
ls[7] = 667 #добавляем в 6 элемент значение (667) (если не определить размер массива то это не сработает)
print(ls)    #выводим принтуем 1D список 

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)                  #Отобразили в консоле массив
▲ 0

Кажется я понял чего вы хотите. 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']]]