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 1274 Точки

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

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 1274 Точки
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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.