Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
90
Tıklama
0
Öne Çıkarma
data = [ [0] * x ] *y kodu neden sağlıklı bir 2 boyutlu tablo oluşturmuyor? (Python)
G
3 yıl
Er
Konu Sahibi

Şimdi kitapta üstünde durulmamış, örneğin biz x = 2, y =3 dediğimizde 0. 1. ve 2. indexteki listelerin aynı değerli indexlerinin aynı şeyleri gösterdiğini söylüyor. Yani biz data[0][1] = 5 dediğimizde bununla beraber aslında hem data[1][1] hem de data[2][1] 'i de 5 olarak değiştirmiş oluyoruz. Yani biz bu işlemden sonra print(data) dediğimizde bize output olarak:
[[0, 5], [0, 5], [0, 5]] çıktısını veriyor. Peki benim sorum neden aslında 2 boyutlu bir tablo oluşturmak için mantıklı bir kod olarak gözükmesine rağmen böyle bir işlem gerçekleşiyor? Yani bunun amacı nedir? İlla ki bir sebebi vardır aslında pek önemli değil belki ama nedense kafam takıldı. Bu arada doğru kodu da şöyle veriyor:

data = [ [0] * x for _ in range(y) ]





< Bu mesaj bu kişi tarafından değiştirildi Guest-33247115E -- 20 Nisan 2021; 18:20:7 >

K
3 yıl
Yarbay

[[0] * 3 for _ in range(4)] şeklinde liste oluşturduğun zaman arkaplanda olan şey şuna benziyor:

I. a = [0]
II. b = a * 3
III. c = [b for _ in range(4)]

Burada b = [0, 0, 0] bunda sorun yok. Sonrasında c tanımlanıyor ve c de 4 tane b list'inden oluşuyor. Yani c = [b, b, b, b] oluyor. Bunlar dikkat edersen b list'inin kopyası değiller, b list'inin bizzat kendisiler. Aynı ID'ye sahip oldukları için, b'yi herhangi bir yerde değiştirirsen, tüm b'ler değişiyor. Senin elde ettiğin tipte bir çıktı alıyorsun.

Eğer ki bu tarz bir şey yapmak istiyorsan kullanabileceğin basit bir sentaks şu:

data = [[0 for i in range(x)] for j in range(y)]

böyle yaparsan her iterasyonda yeni ve eşsiz bir liste yaratmış oluyorsun. Başka alternatif istersen "python deep list copy" vb. gibi google araması yapabilirsin.





< Bu mesaj bu kişi tarafından değiştirildi KaramazovX -- 21 Nisan 2021; 19:32:48 >
Bu mesaja 1 cevap geldi.
G
3 yıl
Er
Konu Sahibi

Çok teşekkür ederim hocam:)



< Bu ileti mobil sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @KaramazovX
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.