Şimdi Ara

data = [ [0] * x ] *y kodu neden sağlıklı bir 2 boyutlu tablo oluşturmuyor? (Python)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
89
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Ş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 >



  • [[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 >
  • KaramazovX kullanıcısına yanıt

    Çok teşekkür ederim hocam:)


    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.