Python Öğreniyorum 7 – Listeler (Soru çözümlü)
Python Öğreniyorum 7 – Listeler (Soru çözümlü). Bu videomuzda listeleri nasıl kullanılabileceğini öğreneceğiz ve örnek soru çözümleri yapacağız.
Merhabalar. Python öğreniyorum serimizin 7.videosuna hoş geldiniz. 6.videomuzda karakter dizilerini – Stringleri nasıl kullanılabileceğini öğrenerek örnek soru çözümleri yaptık. Bu videomuzda listeleri nasıl kullanılabileceğini öğreneceğiz ve örnek soru çözümleri yapacağız. Haydi başlayalım.
Bir değişkende bir değer tutulabilir. Eğer birçok değeri tutmak istiyorsanız ki bu durum birçok programlarda gerekebilir, liste yapısını kullanabilirsiniz. Liste köşeli parantezlerle ifade edilir ve içindeki değerler virgülle ayrılır. Örneğin a = 5, a değişkeni sadece bir değer tutar. Ama b = [1, 3, 5, 7, 9] şeklindeki ifade de b bir listedir ve birçok değer tutmaktadır. Değerlere ulaşmak için bir önceki karakter dizileri dersinde öğrendiğimiz indeksler kullanılır. Soldan sağa doğru 0’dan başlar ve 1, 2, 3 şeklinde devam eder. Sağdan sola doğru ise -1’den başlar ve -2, -3 şeklinde devam eder. Örneğin b dizisi için b[2] 5 değerini, b[-2] ise 7 değerini verir. Bir liste fraklı tiplerde değerler içerebilir.
len fonksiyonu ile listedeki eleman sayısı öğrenilebilir. Mesela renkler listesi gökkuşağı renklerini içersin. Bizim programımız renkler listesindeki renkleri tek tek alıp alt alta yazsın.
1 2 3 |
renkler = ['kırmızı', 'turuncu', 'sarı', 'yeşil', 'mavi', 'lacivert', 'mor'] for i in range(len(renkler)): print(renkler[i]) |
Boş bir liste oluşturup, program içerisinde liste doldurulabilir. Listeye eleman eklemek için append metodu kullanılır. Bir program yazalım. Bu programda önce bir sayı girilsin ve daha sonra bu sayı adedince daha sayı girilsin. Girilen bu sayıları listeye ekleyelim ve sonunda listeyi yazdıralım.
1 2 3 4 5 6 |
liste = [] n = int(input()) for i in range(n): sayi = int(input()) liste.append(sayi) print(liste) |
İki liste + işareti ile birleştirilebilir. Bir liste bir sayı ile çarpıldığında ise sayı adedince çoğaltılır. Örneğin:
1 2 3 4 |
a = [1, 2, 3] b = [4 ,5, 6] print(a + b) print(a * 3) |
1 2 |
[1, 2, 3, 4, 5, 6] [1, 2, 3, 1, 2, 3, 1, 2, 3] |
Split ve join metotları
Split bir önceki derste de öğrendiğimiz gibi string i bölmek için kullanılır. Örneğin bir satırda girilen bir yazıyı kelimelerine ayırıp, bir diziye yerleştirelim.
1 2 |
a = input().split() print(s) |
1 2 |
merhaba bilgisayar hane ['merhaba', 'bilgisayar', 'hane'] |
Bir satırda girilen am sayıları diziye sayı olarak yerleştirmek gerekirse:
1 2 3 4 |
a = input().split() for i in range(len(a)): a[i] = int(a[i]) print(a) |
1 2 |
3 5 7 [3, 5, 7] |
Bu kodu Python da daha kısa bir şeklide yazabiliriz.
1 |
a = [int(i) for i in input().split()] |
Split ile bölünme sembolü belirtilmezse, otomatik olarak boşluk alınır. Şu örneğimizde ise bölünme sembolünü belirtelim. Örneğin verilen IP adresinin sayılarını bir diziye yerleştirelim.
1 2 3 |
s = input() a = s.split('.') print(a) |
1 2 |
192.168.1.0 ['192', '168', '1', '0'] |
join ise dizinin elemanlarını istenilen sembol ile birleştirmek için kullanılır. Örneğin bir önceki programda ki IP sayıları aralarında boşluk olacak şekilde ve parantezler olmadan yazdıralım.
1 2 3 |
s = input() a = s.split('.') print(' '.join(a)) |
1 2 |
192.168.1.0 192 168 1 0 |
Dilimleme
String lerde olduğu gibi listelerde de dilimleme kullanılabilir. Örneğin
renkler = [‘kırmızı’, ‘turuncu’, ‘sarı’, ‘yeşil’, ‘mavi’, ‘lacivert’, ‘mor’]
listesinde şu dilimlemeleri inceleyelim.
renkler[1:4] – [‘turuncu’, ‘sarı’, ‘yeşil’]
renkler[1:5:2] – [‘turuncu’, ‘yeşil’]
renkler[5:1:-1] – [‘lacivert’, ‘mavi’, ‘yeşil’, ‘sarı’]
Listelerin karakter dizilerinden farkı ise elemanların değiştirilebilmesidir. Yani stringlerde değiştirme yapılamaz idi, listelerde ise değiştirme yapılabilir.
Örneğin renkler = [‘kırmızı’, ‘turuncu’, ‘sarı’, ‘yeşil’, ‘mavi’, ‘lacivert’, ‘mor’]
Listesinde renkler[0] = ‘red’ yazarsak yeni liste şu şekilde olacaktır.
renkler = [‘red’, ‘turuncu’, ‘sarı’, ‘yeşil’, ‘mavi’, ‘lacivert’, ‘mor’]
Dilimleme şeklinde de değişiklik yapılabilir. Örneğin renkler = [‘kırmızı’, ‘turuncu’, ‘sarı’, ‘yeşil’, ‘mavi’, ‘lacivert’, ‘mor’] Listesinde
renkler[1:3] = [‘orange’, ‘yellow’, ‘green’]
yazarsak yeni liste şu şekilde olacaktır.
[‘kırmızı’, ‘orange’, ‘yellow’, ‘green’, ‘yeşil’, ‘mavi’, ‘lacivert’, ‘mor’]
Liste Metotları
5 in [1, 3, 5] | True | 5 [1, 3, 5] de var mı? Varsa True, yoksa False |
5 not in [1, 3, 5] | False | 5 [1, 3, 5] de yok mu? Yoksa True, varsa False |
[1, 2] + [3, 4, 5] | [1, 2, 3, 4, 5] | + birleştirmek için kullanılır. |
[1, 2] * 3 | [1, 2, 1, 2, 1, 2] | * liste sayı adedince kopyalanılır |
[1, 3, 5][1] | 3 | 1.ci indeksli karakteri verir |
[1, 3, 5, 7, 9][:3:2] | [1, 5] | Baştan 3.cü indekse kadar 1 atlayarak alır |
len([1, 3, 5, 7, 9]) | 5 | Listedeki eleman sayısını verir |
max([1, 3, 5, 7, 9]) | 9 | En büyük elemanı verir |
min([1, 3, 5, 7, 9]) | 1 | En küçük elemanı verir |
sum([1, 3, 5, 7, 9]) | 25 | Bütün elemanların toplamını verir |
[1, 3, 5, 7, 9].index(5) | 2 | Bulunan ilk 5 sayısının indeksinin verir |
[1, 3, 5, 7, 9].count(5) | 2 | 5 listede kaç defa tekrar ediyor |
a = [1, 3, 5, 7, 9]
a.append(5) |
[1, 3, 5, 7, 9, 5] | 5 a listesine sondan eklenir |
a = [1, 3, 5]
del a[1] |
a = [1, 5]
|
1. indeksli elemanı siler |
a = [1, 3, 5]
a.clear() |
[] | Bütün elemanlar silinir |
a = [1, 3, 5]
b = a.copy() |
[1, 3, 5] | a b’ye kopyalanır |
a = [1, 3, 5]
a.insert(1, 7) |
[1, 7, 3, 5] | 7 sayısı 1.indeksli konuma yerleştirilir ve diğerleri kaydırılır. |
a = [1, 3, 5]
b = a.pop(1) |
[1, 5] | Pop verilen indeksli elemanı alır ve aynı zamanda listeden siler |
a = [1, 3, 5]
a.remove(3) |
[1, 5] | Bulunan ilk 3 sayısını siler |
a = [1, 3, 5]
a.reverse() |
[5, 3, 1] | Listeyi ters çevirir |
a = [1, 5, 3]
a.sort() |
[1, 3, 5] | Listeyi artan şekilde sıralar |
a = [1, 5, 3]
a.sort(reverse=True) |
[5, 3, 1] | Listeyi azalan şekilde sıralar |
a = [1, 5, 3]
bool(a) |
True | Liste boş değilse True, Boşsa False değerini verir |
Ayrıca belirli bir eleman sayısına sahip bir liste oluşturabiliriz. Örneğin 5 elemandan oluşan ve 0 değerlerini içeren bir liste oluşturmak için a = [0] * 5 yapısı kullanılabilir.
Rastgele beş sayıdan (sayılar 1 ile 10 arasında) oluşan bir liste oluşturmak için şu kod kullanılabilir.
1 2 3 |
from random import randrange a = [randrange(1, 10) for i in range(5)] print(a) |
1 |
[2, 3, 5, 9, 6] |
Her çalıştırma da sayılar değişecektir.
Soru Çözümleri
- Bir öncekinden büyük olanlar
Verilen listedeki sayılardan, bir öncekinden büyük olanları veren programı yazınız.
Giriş:
1 8 2 6 3
Çıkış:
8 6
1 2 3 4 |
a = [int(s) for s in input().split()] for i in range(1, len(a)): if a[i] > a[i-1]: print(a[i], end=' ') |
- En büyük sayı ve indeksi
Verilen listedeki en büyük sayıyı ve bu sayının indeksini bulan programı yazınız. Eğer en büyük sayıdan birden çok varsa, ilk sayıyı verecek.
Giriş:
1 2 5 3 1
Çıkış:
5 2
1 2 3 4 5 6 7 8 |
a = [int(i) for i in input().split()] mx = a[0] mi = 0 for i in range(1, len(a)): if a[i] > mx: mx = a[i] mi = i print(mx, mi) |
Python da kısa bir şekilde şöyle yazılabilir.
1 2 3 |
s = [int(i) for i in input().split(' ')] m = max(s) print(m, s.index(m)) |
- Farklı elemanların sayısı
Artan şekilde sıralanan bir listede, kaç farklı sayı bulunduğunu bulan programı yazınız.
Giriş:
1 2 2 2 3 3 3
Çıkış:
3
1 2 3 4 5 6 |
a = [int(s) for s in input().split()] say = 0 for i in range(len(a) - 1): if a[i] != a[i + 1]: say += 1 print(say + 1) |
- Maksimum ve minimum sayıların yer değiştirilmesi
Bütün elemanları farklı olan listede, maksimum ve minimum sayıların yerlerini değiştiren programı yazınız.
Giriş:
3 4 8 2 1
Çıkış:
3 4 1 2 8
1 2 3 4 5 6 7 8 9 |
s = [int(i) for i in input().split(' ')] mx = max(s) mxi = s.index(mx) mn = min(s) mni = s.index(mn) s[mxi] = mn s[mni] = mx for i in s: print(i, end=' ') |
- Eleman silme
Verilen listeden k indeksli elamanı silen programı yazınız. Silinen elemanın sağındaki sayılar sola birer kaydırılacaklar.
Giriş:
7 6 5 4 3 2 1
3
Çıkış:
7 6 5 3 2 1
1 2 3 4 5 6 |
a = [int(s) for s in input().split()] k = int(input()) for i in range(k + 1, len(a)): a[i - 1] = a[i] a.pop() print(' '.join([str(i) for i in a])) |
1 2 3 4 |
s = [int(i) for i in input().split(' ')] d = int(input()) del s[d] print(' '.join([str(i) for i in a])) |
- Eleman ekleme
Verilen listeye k indeksli yere a sayısını ekleyen programı yazınız. Eklenen eleman ve sağındaki tüm elemanlar sağa birer kaydırılacaklar.
Giriş:
7 6 5 4 3 2 1
2 9
Çıkış:
7 6 9 5 4 3 2 1
1 2 3 4 5 6 7 |
s = [int(i) for i in input().split()] k, a = [int(i) for i in input().split()] s.append(0) for i in range(len(s) - 1, k, -1): s[i] = s[i - 1] s[k] = a print(' '.join([str(i) for i in s])) |
1 2 3 4 |
s = [int(i) for i in input().split(' ')] k, a = [int(i) for i in input().split(' ')] s.insert(k, a) print(' '.join([str(i) for i in a])) |