Професионална програма
Loading...
+ Нов въпрос
Shantav avatar Shantav 0 Точки

Проблем с nested lists Python

Кода е следния: 
l_block = list([[1]*5]*5) #инициализирам масив от 2д масив от 5 реда с 5 елемента със стойности 
print(l_block)
l_block[0][3] = 2 #задавам (уш) стойност за елемент от първи ред 3 елемент
print(l_block)
print(l_block[0][3]) 
print(l_block[1][3])
l_block[1][3] = 1
#tova pokazva adresite na pametite
print (hex(id(l_block[0][3])))
print (hex(id(l_block[1][3])))

 

output:

[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
[[1, 1, 1, 2, 1], [1, 1, 1, 2, 1], [1, 1, 1, 2, 1], [1, 1, 1, 2, 1], [1, 1, 1, 2, 1]]
2
2
0x8a87c0
0x8a87c0

Уш задавам стойност за един елемент а се пълнят всичките , след проверка се вижда че 2-та елемента имат един и същ адрес  памет , тоест са една и съща променлива?! Пък уш са са различни листи ?! Не разбирам ?! и Друг въпрос: ако греша в синтаксиса как е правилния синтаксис?

 

 

0
Fundamentals Module
TeodorStefanovPld avatar TeodorStefanovPld 1278 Точки

ти не създаваш матрица а копия на един лист затова са ти еднакви пойтърите и ти се сменят на едно и също място.

Here is a shorter notation for initializing a list of lists:

matrix = [[0]*5 for i in range(5)]

Unfortunately shortening this to something like 5*[5*[0]] doesn't really work because you end up with 5 copies of the same list, so when you modify one of them they all change, for example:

https://stackoverflow.com/questions/6667201/how-to-define-a-two-dimensional-array-in-python ето ти и stackoverflow. но те се вижда ясно и от това че пойнтъра ти е на едно и също място.

  и не е уш а уж :Д:Д

 

0
06/09/2019 02:31:36
Shantav avatar Shantav 0 Точки

то е ясно , че е така и аз го виждам , просто .. явно няма автоматизиран синтаксис който да ти напълни листите с различни пойнтъри

0
TeodorStefanovPld avatar TeodorStefanovPld 1278 Точки
matrix = [[0]*5 for i in range(5)]

а това според теб какво е :Д баси поне четете какво ви отговаряме е хора или поне в стаковърфлоу :Д  има още поне дузина начина по който мога да се сетя да го направя. А дори python не ми е основния език а по-скоро хоби. 

0
Shantav avatar Shantav 0 Точки
a = 5
b = 5

matrix = [[0]*5 for i in range(5)]
print(matrix)
matrix[0][1] = 1
print(matrix)
for a in range(a):
        for b in range(b):
            print(id(matrix[a][b]))

output

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
0x8a87a0
       0x8a87c0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0
0x8a87a0

Интересно пак е една памет а е възможно вкарването на нова променлива.

0
06/09/2019 22:50:56