Ş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 > |
data = [ [0] * x ] *y kodu neden sağlıklı bir 2 boyutlu tablo oluşturmuyor? (Python)
-
-
[[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 > -
Çok teşekkür ederim hocam:)
< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X