1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
   | # créer les listes imbriquées (pareil que ta fonction, avec de la frime en plus)
from functools import reduce
create_nested_list = lambda long, order : reduce(lambda x,_ : [x]*len(x), range(order), [0]*long)
 
# Comme les listes imbriquées sont créées "en remontant", je pense qu'il n'est pas possible de se soustraire au mécanisme de références
# donc, supprimons les, après coup, "en descendant" 
def unref_list(lst):
    if isinstance(lst, list):
        lst = lst.copy() # <= suppression de la référence
        for i in range(len(lst)): # <= on passe aux listes "inférieures"
            lst[i] = unref_list(lst[i]) # <= on appelle la même fonction
    return lst # <= renvoi de la liste "déréférencée"
 
# Pour récupérer un élément, un boucle sur un tuple contenant les index  : 
def get_elt(L, indexes):
    for i in indexes:
        L = L[i] # <= récursif
    return L
 
#####################
##### Example #######
#####################
 
L = create_nested_list(long=2, order=4)
L = unref_list(L)
 
print('\n========== 1 =============')
print(L)
print('\n')
L[1][0][1][0][0] = 1
print(L)
 
print('\n========== 2 =============')
print(get_elt(L,(1,0,1,0,0)))
print(get_elt(L,(1,0,1,0)))
 
print('\n========== 3 =============')
elt = get_elt(L, (1,0,1,0))
for i in range(5):
    elt += [i]
print(L) | 
Partager