Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
133
Tıklama
0
Öne Çıkarma
data = [ [0] * x ] *y kodu neden sağlıklı bir 2 boyutlu tablo oluşturmuyor? (Python)
G
5 yıl (551 mesaj)
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) ]

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

K
5 yıl (4547 mesaj)
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
5 yıl (551 mesaj)
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.