Soru & Cevap

For Döngüsünde Anlayamadığım Kod Parçacığı

16.12.2020 - 06:08

Merhabalar,

Sınavda çıkan bir kod parçası olarak:

A = ["ali","veli","isik"]
B = [1,2,3]
AB = [A, B]

for i in AB:
    if type(i[0]) == str:
        print(list(map(lambda x: x + " hi", i)))

 

1- Bu kodun type (i[0]) şeklinde bir indeks ile [0] yazılmış olmasının nedeni nedir acaba?

2- Neden map(fonc, liste) değilde map(fonc, i ) olarak girilmiş?

Cevaplarınız için şimdiden çok teşekkür ederim.

51 Görüntülenme

5 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user sevgii
sevgii
06.01.2023 - 05:37

Dil tasarımıyla alakalı olabilir

Profile picture for user abdullahergul
abdullahergul
27.06.2022 - 02:12

Dil tasarımı ile alakalı olduğunu düşünüyorum.

picture-317103-1607376854.png
sahiner
19.12.2020 - 05:10

1- " Bu kodun type (i[0]) şeklinde bir indeks ile [0] yazılmış olmasının nedeni nedir acaba? "

Bir döngü oluşturulmak istenmiş ve döngünün göz önünde bulunduracağı i elemanları AB listesinin elemanları olarak belirlenmiş. AB listesi aslında listelerden oluşan başka bir liste olarak tanımlanmış. AB listesi A ve B listelerinin birleşiminden oluşturulmuş. Bu sebepten ötürü AB listesinin elemanları A ve B listeleri diyebiliriz. Dolayısı ile AB listesi üzerinde tanımlanan döngüde A ve B listeleri döngüden çıkacaktır. i[0]==str şartı ise AB listesinin elemanları olan A ve B listelerinin ilk elemanlarına ulaşıp bu elemanlar üzerinde tip sorgusu yapmak için yazılmış. Eğer sonuç TRUE olarak dönerse  print(list(map(lambda x: x + " hi", i))) ifadesini döndürecektir. 

2- " Neden map(fonc, liste) değilde map(fonc, i ) olarak girilmiş? " 

Aslında ilk sorunuza verdiğim yanıtta da ifade ettiğim gibi "i" değeri AB listesinin elemanları olan A ve B listeleri olarak tanımlanmış  ve döngü bu listeler üzerinde çalışıyor. Döngünün altındaki soru yukarıda açıkladığım gibi TRUE olarak sonuçlanırsa print fonksiyonunun akışı aşağıdaki gibi ilerliyor:

 ---  lambda x: x + " hi", i)

   sorguyu True olarak döndüren AB listesinin elemanı olan listeyi yakala ve içerisindeki elemanlara selam ver 

----  map(lambda x: x + " hi", i) 

    selam verme işlemini listedeki her eleman için sırayla uygula 

----  list(map(lambda x: x + " hi", i)) 

     selam verme işlemlerini senkronize olarak bir listeye ekle 

-----  print(list(map(lambda x: x + " hi", i))) 

       son olarak bana bu listeyi göster.

map(fonc, liste) değilde map(fonc, i ) olarak gösterilmesinin sebebi atanacak i değerinin zaten AB nin bir listesi olmasıdır ve i değerine hangi listeyi atayacağına dair bilgi ise, sorguya TRUE cevabını veren liste olarak belirlenmek istenmiştir.

Profile picture for user seckinoz
seckinoz
18.12.2020 - 02:56

AB listesi A ve B listesinden oluşmuş, yani AB listesinin elamanları

AB=[['ali', 'veli', 'isik'], [1, 2, 3]]

şeklinde iki listeden oluşur.

1. sorunun cevabı:
for döngüsü AB üzerinde dönerken i'nin ilk aldığı değer ['ali', 'veli', 'isik'] listesidir. i'nin aldığı değer birden fazla elamanı olan bir listedir. i'nin aldığı bu listeyi type fonksiyonuna sokarsak bize içindeki elemanların tipini değil i'nin bir liste olduğunu söyler.
AB listesinin ilk elemanına ulaşmak için AB[0] şeklinde ['ali', 'veli', 'isik'] listesine ulaşırız. 'ali' elemanına ise AB[0][0], 'isik' elamanına AB[0][2] yazarak ulaşırız.
i ilk döndüğünde AB[0] listesini, ikinci döndüğünde AB[1] listesini alacak. Yani i'nin ilk değeri AB[0] olan listenin ilk elamanına ulaşmak için i[0] yazarız.

Listelerin elemanlarına ulaşmayı araştırın.

2. sorunun cevabı:
i değeri AB listesinin ilk elemanını ['ali', 'veli', 'isik'] liste olarak dönüyor. 

i yerine ['ali', 'veli', 'isik'] ya da AB[0] yazmak yukarısındaki kodları anlamsızlaştırır. 

print(list(map(lambda x: x + " hi", ["ali","veli","isik"])))

ya da

print(list(map(lambda x: x + " hi", AB[0])))

yazabilirdin ama uygun olmaz.
 

picture-68942-1451576545.jpg
yigitdemiralp06
16.12.2020 - 07:23

1- Dilin tasarımından geliyor. Array'in ilk elemanı array'in ram bellekte tutulduğu yerin başlangıç noktasını gösterir.

2 - Döngü elemanıyla indekse ulaşmaya çalıştığımız için dizi yerine döngüde olan elemanla işlem yapılır i, j vs.

 

Link paylaşma iznim var mı bilmiyorum ama google'da arama yaparsan özellikle İngilizce olarak makalelere ulaşabilirsin.