Bu kodu nasıl yazabilirim?

Aşağıdaki gibi rastgele verilen liste içerisindeki
A) en uzun çift sayı içeren,
B) en uzun tek sayı içeren,
C) en uzun artan sıralı haldeki serileri (birbiri ardınca yer alan)
bulan ve bu serileri ekrana yazdıran programı yazın

rastgele verilen liste

liste = [3, 5, 6, 2, 4, 10, 18, 13, 15, 1, 5, 7, 3, 4, 7, 8, 12, 2, 14, 4, 1, 19, 17, 5, 5,
8, 6, 4, 3, 7, 8, 9, 11, 15, 18, 12, 19, 21, 22]
9.12.2021 6
Ekran Çıktısı:
A) Listedeki en uzun cift sayı serisi = [6, 2, 4, 10, 18]
B) Listedeki en uzun tek sayı serisi = [13, 15, 1, 5, 7, 3]
C) Listedeki en uzun sıralı liste = [3, 7, 8, 9, 11, 15, 18]

Yazdığın kodları gösterip takıldığın kısmı söylersen daha kolay yardımcı olabiliriz.

mesela a da en uzun çift sayı içeren diyor burada sıkıntı var.Yani burayı nasıl yazmalıyım o uzunluğu nasıl almalıyım.

Sıkıntı ne tam olarak. Dediği gibi en uzun çift sayı serisini çıktı olarak vermiş. Sadece aynı uzunlukta bir seri daha var ve aralarından listede önce gelen seriyi seçmiş.

A ve B için konuşayım.
numpy kütüphanesi yardımı ile tek ve çift sayıların indeks numaralarını elde edebilirsiniz. (numpy olmadan biraz daha uğraşmanız gerekecek)
Ardından elde ettiğiniz indeks numaraları arasından ardışık olan en uzun kısmı elde edip, o indeks numaralarına ait elemanları bir liste içerisine aktarabilirsiniz. O şekilde de sonuç çıkmış olacaktır.

import numpy as np

liste = [3, 5, 6, 2, 4, 10, 18, 13, 15, 1, 5, 7, 3, 4, 7, 8, 12, 2, 14, 4, 1, 19, 17, 5, 5, 8, 6, 4, 3, 7, 8, 9, 11, 15, 18, 12, 19, 21, 22]
dizi = np.array(liste)

def EnUzunArdışıkÇiftler(dizi):
    indeksler = EnUzunuBul(np.where(dizi % 2 == 0)[0])
    return list(dizi[indeksler])

def EnUzunArdışıkTekler(dizi):
    indeksler = EnUzunuBul(np.where(dizi % 2 != 0)[0])
    return list(dizi[indeksler])

def EnUzunuBul(indeksler):
    sonuç = []
    for x in indeksler:
        for y in sonuç:
            if x == y[-1] + 1:
                y.append(x)
        else:
            sonuç.append([x])
            
    return max(sonuç, key=len)

def EnUzunArdışıkSayılar(dizi):
    sonuç = []
    önceki = dizi[0]
    alt_liste = [önceki]
    for mevcut in dizi[1:]:
        if mevcut >= önceki:
            alt_liste.append(mevcut)
        else:
            sonuç.append(alt_liste)
            alt_liste = [mevcut]
        önceki = mevcut
            
    return max(sonuç, key=len)
    

print(EnUzunArdışıkÇiftler(dizi))
print(EnUzunArdışıkTekler(dizi))
print(EnUzunArdışıkSayılar(dizi))

[6, 2, 4, 10, 18]
[13, 15, 1, 5, 7, 3]
[3, 7, 8, 9, 11, 15, 18]

Edit: C için de çözümü ekledim.

2 Beğeni

Teşekkür ediyorum cevabınız için.

1 Beğeni