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