Python'da Listeler: Ekleme, Silme, Sıralama ve Dilimleme
Liste oluşturmayı, append, extend ve insert ile eleman eklemeyi, remove ve pop ile silmeyi, sort ile sıralamayı ve dilimlemeyi kısa örneklerle öğrenirsiniz. Sık yapılan hatalardan nasıl kaçınacağınızı da görürsünüz.
Bir bakışta
- Liste, sıralı ve değiştirilebilir bir koleksiyondur. Köşeli parantezle oluşturulur, farklı türde öğeler barındırabilir ve oluşturulduktan sonra değiştirilebilir.
- append tek öğe ekler, extend birden çok öğe ekler. insert ise öğeyi belirttiğiniz konumun önüne yerleştirir.
- remove değere göre, pop konuma göre siler. pop silinen öğeyi geri verir; ikisi de uygun öğe yoksa hata üretir.
- sort listeyi yerinde sıralar ve None döndürür. Yeni liste istiyorsanız sorted kullanın; a = a.sort() yazmayın.
- Dilimleme, listenin bir bölümünü yeni liste olarak verir. Başlangıç dahil, bitiş hariç çalışır ve orijinal listeyi değiştirmez.
Liste oluşturma ve öğelere erişme
Liste, öğeleri köşeli parantez içinde virgülle ayırarak yazılır. Liste sıralıdır ve oluşturulduktan sonra öğeleri değiştirilebilir. İçine farklı türde değerler koyabilirsiniz.
meyveler = ['elma', 'armut', 'kiraz'] bos_liste = []
ilk = meyveler[indeks]
İndeksler sıfırdan başlar; yani ilk öğenin indeksi sıfırdır. Negatif indeks listeyi sondan sayar: sondaki öğeye eksi birle ulaşılır. Aralığın dışında bir indeks verirseniz IndexError alırsınız.
Bir öğeyi değiştirmek için indekse atama yapmanız yeterlidir. len ile uzunluğa, in ile bir değerin listede olup olmadığına bakarsınız:
meyveler[indeks] = 'şeftali' uzunluk = len(meyveler) var_mi = 'elma' in meyveler
Listeyi bir döngüyle gezerken öğeler sırayla alınır. Gezdiğiniz listeyi aynı anda değiştirmek beklenmedik sonuç verir; gerekiyorsa listenin kopyası üzerinde gezin.
Eleman ekleme: append, extend, insert
Python belgelerinde liste metotları şöyle tanımlanır. append(x) öğeyi listenin sonuna ekler. extend(iterable) bir yinelenebilir nesnedeki tüm öğeleri sona ekler. insert(i, x) öğeyi i konumunun önüne yerleştirir; başa eklemek için konum olarak sıfır verilir.
meyveler.append('muz') meyveler.extend(['üzüm', 'incir']) meyveler.insert(konum, 'ayva')
append ile extend arasındaki fark en çok karıştırılan noktadır. Bir listeyi append ile eklerseniz o liste tek bir öğe olarak içeri girer ve iç içe liste oluşur. extend ise onun öğelerini tek tek ekler.
meyveler.append(['kayısı', 'vişne']) # iç içe liste meyveler.extend(['kayısı', 'vişne']) # ayrı ayrı öğeler
İki listeyi birleştirip yeni bir liste oluşturmak istiyorsanız toplama işleci kullanılır: yeni = liste_bir + liste_iki. Bu orijinal listeleri değiştirmez.
Üç ekleme metodu farklı konuma farklı miktarda ekler
| append | extend | insert | |
|---|---|---|---|
| Ne ekler | Tek öğe | Yinelenebilir nesnenin tüm öğeleri | Tek öğe |
| Nereye | Listenin sonuna | Listenin sonuna | Verilen konumun önüne |
| Liste verilirse | İç içe liste olur | Öğeleri tek tek eklenir | İç içe liste olur |
| Ne zaman | Sona tek öğe eklerken | Birden çok öğe eklerken | Belirli konuma eklerken |
Eleman silme: remove, pop, clear ve del
Silmenin birkaç yolu vardır ve ne istediğinize göre seçilir.
- remove(x): değeri x olan ilk öğeyi siler. Böyle bir öğe yoksa ValueError verir.
- pop(i): i konumundaki öğeyi siler ve geri döndürür. Konum verilmezse sondaki öğeyi alır. Liste boşsa ya da konum aralık dışındaysa IndexError verir.
- clear(): listedeki tüm öğeleri siler.
- del liste[konum]: belirtilen konumdaki öğeyi ya da bir dilimi siler; değer döndürmez.
meyveler.remove('armut') son_meyve = meyveler.pop() ilk_meyve = meyveler.pop(konum) del meyveler[konum] meyveler.clear()
Ayrım şöyledir: değeri biliyorsanız remove, konumu biliyorsanız pop ya da del, silinen öğeye ihtiyacınız varsa pop kullanın. remove yalnızca ilk eşleşmeyi siler; aynı değer birkaç kez geçiyorsa hepsini silmek için bir döngü ya da yeni bir liste kurmak gerekir. Bir listeden koşula uyan öğeleri çıkarmak için gezerken silmek yerine liste üreteciyle yeni liste oluşturmak daha güvenlidir.
Sıralama: sort, sorted ve reverse
sort(), listeyi yerinde sıralar. key ve reverse parametreleri alır: key her öğeden sıralama değerini çıkaran fonksiyon, reverse ise sırayı ters çevirmek içindir. reverse() metodu da listeyi yerinde tersine çevirir.
sayilar.sort() sayilar.sort(reverse=True) adlar.sort(key=len) yeni_liste = sorted(sayilar)
Python belgeleri, insert, remove, sort ve reverse gibi listeyi değiştiren metotların None döndürdüğünü ve bunun değiştirilebilir veri tiplerindeki genel bir tasarım ilkesi olduğunu belirtir. Bu nedenle sonucu bir değişkene atamak, değişkeni None yapar.
Orijinal listeyi korumanız gerekiyorsa sorted kullanın; sorted yeni bir liste döndürür. Listede hem metin hem sayı karışık duruyorsa Python bunları karşılaştıramaz ve hata verir; önce türleri eşitleyin.
sort sonucunu değişkene atamayın
Dilimleme ve kopyalama
Dilimleme, listenin bir bölümünü yeni bir liste olarak alır. Yazımı liste[baslangic:bitis] biçimindedir; başlangıç dahil, bitiş hariçtir. Başlangıç ya da bitiş yazılmazsa sırasıyla baştan ve sona kadar alınır; üçüncü bir değerle adım da verilebilir.
bastan = meyveler[:bitis] sondan = meyveler[baslangic:] aralik = meyveler[baslangic:bitis] atlayarak = meyveler[::adim]
Dilimleme orijinali değiştirmez, yeni bir liste verir. Python belgeleri copy() metodunun a[:] ile eşdeğer olduğunu belirtir; ikisi de listenin sığ kopyasını üretir. Sığ kopya, listenin kendisini kopyalar ama içindeki nesneleri paylaşır; öğeler de liste gibi değiştirilebilir nesneler ise iki listede aynı nesneler görünür.
yedek = meyveler.copy()
Yalnızca yedek = meyveler yazmak kopya oluşturmaz; iki ad aynı listeyi gösterir ve birinde yaptığınız değişiklik diğerinde de görünür.
Diğer yararlı metotlar ve sık hatalar
index(x), x değerinin ilk görüldüğü konumu verir; değer yoksa ValueError verir. count(x), x değerinin listede kaç kez geçtiğini söyler. sum, min ve max gibi yerleşik işlevler sayı listelerinde sık kullanılır.
Listeler iç içe de olabilir; liste öğeleri başka listeler olduğunda tablo benzeri veri tutarsınız ve satır[sutun] biçiminde erişirsiniz. Sayı listelerinde sum toplamı, min ve max en küçük ve en büyük değeri verir. Sık yapılan hatalar şunlardır:
- append ile extend'i karıştırmak: iç içe liste oluşur.
- sort sonucunu atamak: değişken None olur.
- Listeyi gezerken silmek: bazı öğeler atlanır.
- Kopyalamak için eşittir kullanmak: iki ad aynı listeyi gösterir.
- Aralık dışı indeks vermek: IndexError alınır.
- Boş listeye pop uygulamak: IndexError alınır.
- Listeyi sözlük ya da demet yerine kullanmak: sabit bir kayıt için demet, anahtarla erişim için sözlük daha uygundur.
Bu beceriyi Mindset programlarında nerede çalışırsınız
Python ile Programlama Eğitimi, Veri Yapıları modülünde listeleri, ardından döngüleri ve fonksiyonları işler. Excel dışında veri düzenlemeye başlayan analistler ve yeni geliştiriciler için liste, Python'da veriyi tutmanın en temel yoludur; sözlük ve liste üreteci gibi konulara geçmeden önce burada sağlam temel gerekir.
İlgili Mindset programı
Python ile Programlama Eğitimi
Sık sorulan sorular
append ile extend arasındaki fark nedir?
append tek bir öğeyi sona ekler; bir liste verirseniz o liste tek öğe olarak girer ve iç içe liste oluşur. extend ise verdiğiniz yinelenebilir nesnenin öğelerini tek tek sona ekler. Birden çok değeri düz biçimde eklemek istiyorsanız extend kullanın.
Listeyi nasıl kopyalarım?
copy() metodunu ya da tam dilimi kullanın; Python belgelerine göre ikisi eşdeğerdir ve sığ kopya üretir. yedek = liste yazmak kopya oluşturmaz, aynı listeyi ikinci bir adla gösterir. İç içe listelerde sığ kopya iç listeleri paylaştığından ek önlem gerekebilir.
remove ile pop arasındaki fark nedir?
remove değere göre ilk eşleşen öğeyi siler ve bir şey döndürmez. pop konuma göre siler ve silinen öğeyi geri verir; konum verilmezse sondaki öğeyi alır. Değeri biliyorsanız remove, konumu biliyorsanız ya da öğeye ihtiyacınız varsa pop uygundur.
sort ile sorted hangisini kullanmalıyım?
Orijinal listenin sırasını değiştirmekte sakınca yoksa sort kullanın; yeni sıralı bir liste istiyorsanız ya da liste olmayan bir yinelenebilir nesneyi sıralıyorsanız sorted kullanın. sort None döndürdüğünden sonucunu değişkene atamayın, yoksa listenizi kaybedersiniz.
Dilimleme neden bitiş değerini içermez?
Python'da aralıklar bitiş hariç tanımlanır. Bu, ardışık dilimleri boşluk ya da çakışma olmadan birleştirmeyi ve uzunluğu bitiş eksi başlangıç olarak hesaplamayı kolaylaştırır. Bitiş konumunu dahil etmek istiyorsanız bitişe bir eklemeniz gerekir.
İlgili rehberler
Kategori: Yazılım Geliştirme