Python üzerine bir soru

Kodla Büyü

or_han

Site Gezgini
Mesajlar
48
Screenshot_20231203_232737_Coding Python.jpg

Kodu çalıştırdigimda [2,1,4] sonucunu gösteriyor. Neden böyle bir sonuç çıkartıyor anlamis değilim ...
if i%2==0 şeklinde yazılsaydi [9,1,7] çift sayıları listeden kaldır olacaktı.....
 
Yukarıdaki kodu bir kaç farklı şekilde yazabilirsiniz. @ykoc bir tanesini göstermiş.

i%2 size bool türünde değer döndürmez bu yüzden direkt olarak if ile birlikte kullanamazsınız. ya i%2==0 ile bir sorgulama yapacaksınız veya bool(i%2) şeklinde bir bool türüne düşüm yaparak sorgulama yapacaksınız.

Python:
Liste = [2,9,1,4,7]
for i in Liste:
    if not bool(i%2):
        Liste.remove(i)
print(Liste)

Bir diğer yöntem ise Python'un List Comprehension yöntemlerinden yararlanacaksınız.

Kod:
Liste = [2,9,1,4,7]
Liste = [x for x in Liste if x%2==1]
print(Liste)
 
Hocam i%2 dediğinizde ilk sayı için düşünün :

2%2 = 0 değer döndürür. if 0: Bu da False demek silme işlemi yapmaz.
9%2 = 1 değer döndürür. if 1: Bu da True demek silme işlemi yapar.

Yalnız i değerleri dönerken siz remove işlemi yapıyorsunuz ve listeden değer kaldırıyorsunuz. O yüzden listedeki 1 sayısına ulaşmadan index değeri değişiyor veri sildiğiniz için. Kafanız o yüzden karışmış.
 
Ekli dosyayı görüntüle 74934
Kodu çalıştırdigimda [2,1,4] sonucunu gösteriyor. Neden böyle bir sonuç çıkartıyor anlamis değilim ...
if i%2==0 şeklinde yazılsaydi [9,1,7] çift sayıları listeden kaldır olacaktı.....

Buradaki durum remove fonksiyonundan kaynaklanıyor bence, dökümantasyonuna bakarsanız daha yardımcı olabilir ama bildiğim kadarıyla çalışma mantığı indeksleme yaparak silmek şeklinde, yani for döngüsüyle bir elemanı silip diğerine geçtiğinizde elemanların yerleri de değişiyor bu yüzden koşula uygun bir sonuç çıkmıyor. Koşulda sorun yok bence koşul 0 false olarak başka herhangi bir değer çıkarsa true olarak alınır python'da. verdiğiniz örnekte koşul olmadan tüm listeyi for döngüsü ile silmek isterseniz iki elemanı silmediğini göreceksiniz zaten.
 
liste=[2,9,1,4,7]
for i in liste:
if i%2==0:
liste.remove(i)
print(liste)

bunu yazınca
[9, 1, 7]
bu sonucu verdi
 
Hocam listeden eleman çıkacağı zaman for döngüsünü tersten saydırabiliriz. Bu şekilde index atlaması olmaz. Aşağıdaki kod tek sayıları çıkarıyor.

Liste=[2,9,1,4,7]
for i in Liste[::-1]:
if i%2:
Liste.remove(i)

print(Liste)


Sonuç:
[2, 4]
 
Peş peşe 2 çift sayı var ise birini atlar bu kod
Bu yöntem iş yapar bence
liste=[1,9,4,6,3,5,4,4,7]
liste1=[]
for i in liste:
if (i%2)==1:
liste1.append(i)

liste.clear()
liste=liste1
print(liste)
Ayrıca teklerin indexini alıp sildirme yontemide iş yapabilr
 
Geri
Üst