Liste elamnlarını ayrı listeler halinde oluşturmak

[[(1, 'ABATHAN', 'Y.Cengiz'), (2, 'CEMAL', 'M.A.Aktürk'), (3, 'EFE İKİ', 'C.A.Mayda'), (4, 'KARA SÜVARİ', 'M.Şakir'), (1, 'KIRMIZI', 'A.Çankaya'), (2, 'DUR', 'M.Şakir'), (3, 'ESRA', 'M.Akdağ'), (4, 'TUR MATRA', 'A.H.Bayar'), (5, 'YASMİNCAN', 'Mahs.Turan')]]

Kodun çıktısının aşağıdaki gibi ayrı listeler halinde olmasını istiyorum. Nasıl yapabilirim.

[(1, 'ABATHAN', 'Y.Cengiz'), (2, 'CEMAL', 'M.A.Aktürk'), (3, 'EFE İKİ', 'C.A.Mayda'), (4, 'KARA SÜVARİ', 'M.Şakir')]
[(1, 'KIRMIZI', 'A.Çankaya'), (2, 'DUR', 'M.Şakir'), (3, 'ESRA', 'M.Akdağ'), (4, 'TUR MATRA', 'A.H.Bayar'), (5, 'YASMİNCAN', 'Mahs.Turan')]

Merhaba kolay gelsin. Açıkcası kod ve çıktı çok uzun olduğu için insanların cevap verme ihtimalinin düşük olduğunu düşünüyorum. Kodu ve çıktıyı sadeleştirip atarsan sevinirim. Genelde uzun kod atıldığında kimse kafa yormaz.

1 Beğeni

Nasıl bir kod yazdın?
Bu çıktı hangi işlem sonrası ve hangi kod ile elde ediliyor.?
Bunları paylaşmazsan yardımcı olmak zor.

Aksi halde elimizde 9 demet veri içeren liste içinde liste var gibi düşünüp ona göre kod yazılır.
Bu kod senin kodlarına dahil edildiğinde, sonucun farklı miktarda değer vermesi halinde aynı çıktıyı vermez.

Anlatabildim mi? emin değilim

1 Beğeni

Öyle soruya böyle cevap:

zp = [[(1, 'ABATHAN', 'Y.Cengiz'), (2, 'CEMAL', 'M.A.Aktürk'), (3, 'EFE İKİ', 'C.A.Mayda'), (4, 'KARA SÜVARİ', 'M.Şakir'), (1, 'KIRMIZI', 'A.Çankaya'), (2, 'DUR', 'M.Şakir'), (3, 'ESRA', 'M.Akdağ'), (4, 'TUR MATRA', 'A.H.Bayar'), (5, 'YASMİNCAN', 'Mahs.Turan')]]

t = list()
g = list()
all_l = list()
for i, r in zip(zp[0], range(len(zp[0]))):
    t.append(i)
    if r < t[0][0]:
        t = t[:-1]
        g.append(i)
        all_l.append(t)
        if r < g[0][0]:
            g = g[r:]
            all_l.append(g)

for i in all_l:
    print(i[1:])

Boş listeleri kaldırırsın.

2 Beğeni

Kod çok uzun olduğu için BandoLero nun uyarısıyla buraya yazmak istemedim. Dediğiniz gibi belki mevcut kodda farklı bir düzeltmeyle istediğimi elde edebilirdim. Bende çıktı üzerinden mantığı kullanarak düzeltme yoluna gitmek istedim.

1 Beğeni

Ben sadece kodun sorunlu olan kısmını sadeleştirip atmanın mantıklı olduğunu düşünerek söyledim. Bütün kodu da atabilirsiniz z.

AGF=[]
NO=[]
ATADI=[]
TAKI=[]
AYGIR_KISRAK=[]
KILO=[]
JOKEY=[]
ATSAHIBI_ANTRENOR=[]
START=[]
HANDIKAP_PUANI=[]
DERECE=[]
KOSMADIGI_GUN=[]
ORTALAMA_PUAN=[]
KOSU_BILGISI=[]
KOSULAR=[]
BASLIK=["AGF","NO","ATADI","TAKI","AYGIR_KISRAK","KILO","JOKEY","ATSAHIBI/ANTRENOR","START","HANDIKAP_PUANI","DERECE","KOSMADIGI GUN","ORT.PUAN"]
for j in range(0,len(kosudaki_atsayisi)):
    for i in range(0,kosudaki_atsayisi[j]):

        agf=soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_2".format(j,i)}).text
        AGF.append(agf.strip())
        no=soup.find("td", attrs={"id":"grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_2".format(j,i)}).next_sibling.text
        NO.append(int(no.strip()))
        atadi = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_4".format(j,i)}).find("a").text
        ATADI.append(atadi.strip())
        taki = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_4".format(j,i)}).find_all("b", text=True)
        taki_bul=[]
        for b in taki:
            if b.get_text()==" " or b.get_text()=="KOŞMAZ":
                continue
            taki_bul.append(b.text)
        TAKI.append("".join(taki_bul))
        aygir = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_6".format(j,i)}).text
        x="".join(aygir.split())
        kisrak_kisrakbabasi = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_7".format(j,i)}).text
        y="".join(kisrak_kisrakbabasi.split())
        AYGIR_KISRAK.append("/".join((x,y)))
        kilo=soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_8".format(j,i)}).text.split()
        Kilo=[]
        for x in kilo:
            Kilo.append(float(x.replace(",",".")))
            toplam=0
            for y in Kilo:
                toplam+=y
        KILO.append(toplam)
        jokey=soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_9".format(j,i)}).text
        JOKEY.append(jokey.strip())
        at_sahibi = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_10".format(j,i)}).text
        x=" ".join(at_sahibi.split())
        antrenor = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_11".format(j,i)}).text
        y=" ".join(antrenor.split())
        ATSAHIBI_ANTRENOR.append("/".join((x,y)))
        start = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_12".format(j,i)}).text
        START.append(int(start.strip()))
        handikap_puani= soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_12".format(j,i)}).next_sibling.text
        HANDIKAP_PUANI.append(handikap_puani.strip())
        derece = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_14".format(j,i)}).find_all("td")
        for x in derece:
            DERECE.append(" ".join(x.text))
        kosmuyor = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_15".format(j,i)}).text
        KOSMADIGI_GUN.append(kosmuyor.strip())
        ortalama_puan = soup.find("td", attrs={"id": "grdProgTamEkran_dxdt{}_grdProgramTekKosuAtBilgi_tccell{}_15".format(j,i)}).next_sibling.text
        ORTALAMA_PUAN.append(int(ortalama_puan.strip()))
df = pd.DataFrame(list(zip(AGF,NO,ATADI,TAKI,AYGIR_KISRAK,KILO,JOKEY,ATSAHIBI_ANTRENOR,START,HANDIKAP_PUANI,DERECE,KOSMADIGI_GUN,ORTALAMA_PUAN)), columns=BASLIK)
print(df)

çıktı olarak aşağıdaki tabloyu alıyorum. Amacım Bu tabloya kosu bilgi kodunuda ekleyerek tabloyu oluşturmak.Koşu bilgi kodu numaralar her 1 den başladığında başlık olarak eklenecek.Döngüye dahil edemiyorum.

kosu_bilgisi= soup.find("td", attrs={"id": "grdProgTamEkran_tccell{}_0.format(j)"}).find("tr").text
KOSU_BILGISI.append(" ".join(kosu_bilgisi.split()))
      AGF  NO              ATADI  ...         DERECE KOSMADIGI GUN  ORT.PUAN

0 13.02-(5) 1 BEDİZ ALİ … 5 0 2 - 4 5 3 4 53
1 2.40-(8) 2 BOĞAZLAYAN … 6 0 6 - 3 0 8 4 28
2 18.27-(2) 3 CANAGEL … 0 8 - 2 3 7 4 119
3 6.07-(6) 4 KERKÜK … 4 8 8 - 0 4 5 9 12
4 15.44-(3) 5 ÖZGÜNKAYA … 4 3 - 9 5 2 1 4 153
5 14.14-(4) 6 SEYYAHTAY … 4 3 8 - 3 4 6 4 36
6 4.43-(7) 7 ŞAH BEYİT … 0 9 4 4 9 - 4 96 48
7 25.41-(F) 8 VARLIKLIŞAH … 3 5 - 8 3 3 2 9 105
8 0.83-(9) 9 PRENSES KARACA … 8 6 0 - 0 0 9 18 6
9 22.78-(F) 1 CANGELDİ … 4 2 - 1 1 18 153
10 18.69-(2) 2 CESUR RÜZGAR … 4 4 - 5 3 1 2 6 118
11 8.04-(6) 3 İLBERK … 1 3 5 0 - 5 9 6 63
12 10.43-(5) 4 YALI EFESİ … 7 6 7 3 - 7 3 18 41

Kodlama işine yeni başladığımdan kodlar biraz düzensiz olabilir. O yüzden kusura bakmayın

Olum yazdığım kodu ciddiye almana üzüldüm, ama cidden çabanı takdir ettim. Gerekli yardımı mutlaka göreceksin.

1 Beğeni

Listeleri ayiran mekanizma nedir?

Öğrencıler
Ad Soyad Yaş
1
2
3
Öğretmenler
Ad Soyad Brans
1
2
3

Böyle bir tablo oluşturmanın mantığı nedir. Mantığı çözebilirsem kodu yazarım diye düşünüyorum.

Kanka mantığı çözebilirsen matematiği de çözersin.
Matematik önermeler cebiri ile başlar.
Ama önermem.

Sen nasıl bir çıktıyı hangi koşul ve kriterle seçeceğini, nasıl bir veri setinden bu verileri filtreleyeceğini anlat ki, insanlar senin mantığına erişip sana yardımcı olsun.

import pandas as pd


def f(x: list, r: list = None):
    return r if not x else f(x[1:], [[x[0]]]) if not r else f(x[1:], r + [[x[0]]]) if x[0][0] == r[0][0][0] else f(x[1:], (lambda a, b: [a[-1].append(b), a][-1])(r, x[0]))


test = [[(1, 'ABATHAN', 'Y.Cengiz'), (2, 'CEMAL', 'M.A.Aktürk'), (3, 'EFE İKİ', 'C.A.Mayda'), (4, 'KARA SÜVARİ', 'M.Şakir'), (1, 'KIRMIZI', 'A.Çankaya'), (2, 'DUR', 'M.Şakir'), (3, 'ESRA', 'M.Akdağ'), (4, 'TUR MATRA', 'A.H.Bayar'), (5, 'YASMİNCAN', 'Mahs.Turan')]]
ftest = f(test[0])
for index, i in enumerate(["Öğrenci", "Öğretmen"]):
    print(pd.DataFrame(ftest[index], columns=["Sıra", "Soyisim", "İsim"]).assign(**{"Statü": [i] * len(ftest[index])}))

Çıktı:

   Sıra      Soyisim        İsim    Statü
0     1      ABATHAN    Y.Cengiz  Öğrenci
1     2        CEMAL  M.A.Aktürk  Öğrenci
2     3      EFE İKİ   C.A.Mayda  Öğrenci
3     4  KARA SÜVARİ     M.Şakir  Öğrenci
   Sıra    Soyisim        İsim     Statü
0     1    KIRMIZI   A.Çankaya  Öğretmen
1     2        DUR     M.Şakir  Öğretmen
2     3       ESRA     M.Akdağ  Öğretmen
3     4  TUR MATRA   A.H.Bayar  Öğretmen
4     5  YASMİNCAN  Mahs.Turan  Öğretmen

Her şey dilde olup bitiyor işte.

Bu şekilde çıktı almaya çalışıyorum. Umarım anlatabilmişimdir.

Vay be, rahmetli Kemal Sunal’ın filmleri geldi şimdi de aklıma…

Ulan bunların hepsi At Yarışı için miydi? :slight_smile:

Neyse, kolay gelsin kanka.

1 Beğeni

Ayrıl da gel Ayşe:) Tablo Mantığını burada çözebileceğimi düşünmüştüm