Listedeki Boşluğu Doldurmak

Merhaba. Aklıma takılan bir şey var. Herhangi bir kodlama diliyle alakalı değil, tamamen algoritma. Mesela elimizde dışarıdan gelen veriye göre 1-1 artan sayi değişkeni var. Her veri girildiğinde aşağıdaki gibi oluyor:

0, "Veri"
1, "Veri"
2, "Veri"

Biz aradan 1 numaralı veriyi silersek şöyle bir çıktı alıyoruz:

0, "Veri"
2, "Veri"

Daha sonrasında girilecek veride 3’ten devam etmesi değil de ilk olarak boş olan numarayı doldurmak için nasıl bir algoritma kurmam gerekiyor? Python dili ile örnek vererek açıklarsanız çok iyi olur benim için.

Not: Veriler dinamik olarak ekleniyor. Kodla değil.

Örnek vermesi açısından belki şöyle birşeyler


veri_listesi = ["veri1", "veri2", "veri3"]
def sırala():
	print(*enumerate(veri_listesi, 1), sep="\n")

sırala()
#veri2yi siliyoruz
veri_listesi.remove("veri2")
print("\nsilindikten sonraki hal; \n")
sırala()
1 Beğeni

Listeye eleman eklerken:

  • sonSayi = -1, listeye bastan basliyoruz
  • Listedeki sonraki elemanin sayisina bak:
    • sonSayi+1’den buyuk ise yeni elemani buraya, sayi=sonsayi+1 ile ekle, bitir
    • degilse sonSayi’yi sayi yap, tekrarla
1 Beğeni

Selamun Aleyküm, aşağıda istediğinize benzer bir kod yazdım Umarım işinize yarar.


# -*- coding: utf-8 -*-
veriler = [[],[]]    # [[veri_siralari], [veri_değerleri]] şeklinde liste tanımladım

def kayit(veri):
    sayac = 0
    
    # Önce veriler listesinin boş olup olmadığını kontrol ediyoruz
    if len(veriler[0]) == 0:    # Eğer veri_siralari listesi boşsa
        veriler[0].append(0)    # veri_siralari listesine 0 değerini ekle
        veriler[1].append(veri)    # veri_degerleri listesine ilk veriti ekle
        
    else:    # Liste boş değilse
        for i in range(len(veriler[0])):    # veri_siralari listesinin uzunluğu kadar dön
            if veriler[1][i] == "":    # Eğer değeri silinmiş bir veri varsa
                veriler[1][i] = veri    # Buraya yeni veriyi ekle
                break    # Başka birşey yapma
                
            elif sayac == (len(veriler[1])-1):    # Eğer son veriye gelinmiş ise
                veriler[0].append(len(veriler[0]))    # veri_siralari'na yeni sira ekle
                veriler[1].append(veri)    # veri_degerleri'ne yeni değeri ekle
                
            else:
                pass
            sayac += 1
    
    for eleman in veriler[0]:
        print(veriler[0][eleman],". kayit --> ",veriler[1][eleman])
            
       
def sil(veri_sirasi):
    veriler[1][veri_sirasi]=""
    
    for eleman in veriler[0]:
        print(veriler[0][eleman],". kayit --> ",veriler[1][eleman])

Çıktılar aşağıdadır; iyi çalışmalar…

kayit("Linux")
0 . kayit -->  Linux

kayit("Ubuntu")
0 . kayit -->  Linux
1 . kayit -->  Ubuntu

kayit("Debian")
0 . kayit -->  Linux
1 . kayit -->  Ubuntu
2 . kayit -->  Debian

kayit("Pardus")
0 . kayit -->  Linux
1 . kayit -->  Ubuntu
2 . kayit -->  Debian
3 . kayit -->  Pardus

kayit("Mint")
0 . kayit -->  Linux
1 . kayit -->  Ubuntu
2 . kayit -->  Debian
3 . kayit -->  Pardus
4 . kayit -->  Mint

sil(3)
0 . kayit -->  Linux
1 . kayit -->  Ubuntu
2 . kayit -->  Debian
3 . kayit -->  
4 . kayit -->  Mint

kayit("Pardus 19 XFCE")
0 . kayit -->  Linux
1 . kayit -->  Ubuntu
2 . kayit -->  Debian
3 . kayit -->  Pardus 19 XFCE
4 . kayit -->  Mint
1 Beğeni
veri_listesi = ["veri1","veri2","veri3"]

def listeye_ekle(veri):
    veri_listesi.append(veri)

def listeden_sil(veri):
    global sira
    sira = veri_listesi.index(veri)
    veri_listesi.remove(veri)
    

def silinene_ekle(yeniveri):
    veri_listesi.insert(sira,yeniveri)

listeye_ekle("veri4")
print(veri_listesi)
listeden_sil("veri2")
print(veri_listesi)
silinene_ekle("yeniveri")
print(veri_listesi)