Sorted() fonksiyonuyla ilgili örnekler


Örnek-1

Diyelim elimizde rastgele sayılardan oluşan bir dizi var. Ve bu diziyi küçükten büyüğe veya büyükten küçüğe sıralamak istiyoruz. Böyle bir durumda sorted() fonksiyonunu aşağıda gösterildiği gibi kullanabiliriz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

dizi = [12, 1, 8, 4, 9, 3, 7]

print(sorted(dizi))

Yukarıdaki kodları çalıştırdığımızda aşağıdaki gibi bir çıktı almış olmamız lazım.

[1, 3, 4, 7, 8, 9, 12]

Gördüğünüz gibi küçükten büyüğe doğru bir sıralama yapılmış. Bu sıralamayı isterseniz bir çok yoldan tersine de çevirebilirsiniz. Örneğin sorted() fonksiyonunun reverse isimli bir argümanı vardır. Ön-tanımlı değeri False'tur. sorted(iterable, reverse=True) şeklinde kullandığımız zaman sıralamayı tersine çeviririz. Ayrıca reversed(sorted(iterable)) veya sorted(iterable)[::-1] şeklinde diziyi ters bir şekilde sıralayabiliriz.


Örnek-2

Bu örnekte sorted() fonksiyonunu key argümanı ile kullanalım.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

dizi = [12, 1, 8, 4, 9, 3, 7]

print(sorted(dizi, key=lambda i: i % 2 == 0))

Yukarıdaki kodları çalıştırdığımızda şöyle bir çıktı almış olmamız lazım.

[1, 9, 3, 7, 12, 8, 4]

Yukarıdaki listede çift sayıların tek sayılardan sonra gelmiş olduğunu dikkatiniz çekmiştir.


Örnek-3

Bu örnekte sorted() fonksiyonunu iki defa kullanmaya çalışalım.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

dizi = [12, 1, 8, 4, 9, 3, 7]

print(sorted(sorted(dizi), key=lambda i: i % 2 == 0))

Yukarıdaki kodları çalıştırdığımızda ise aşağıdaki gibi bir çıktı almış olmamız lazım.

[1, 3, 7, 9, 4, 8, 12]

Bu çıktıda tek sayıların kendi aralarında, çift sayıların da kendi aralarında küçükten büyüğe doğru sıralandığını görüyoruz.


Örnek-4

Bu sefer sorted() fonksiyonunun key argümanıyla bir örnek daha yapalım.

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

dizi = [
    1, "cdj2", 89, [1, 2], 12, "aporgk",
    "yaga", "yuma", "gjek", 3, "zekgk", 0,
    [], {'a': 2}, (), None, False, True, 1.2
]

print(sorted(dizi, key=lambda i: isinstance(i, str)))

Yukarıdaki kodları çalıştırdığımızda aşağıdaki gibi bir çıktı almamız gerekir.

[
    1, 89, [1, 2], 12, 3, 0,
    [], {'a': 2}, (), None, False, True, 
    1.2, 'cdj2', 'aporgk', 'yaga', 'yuma', 
    'gjek', 'zekgk'
]

Gördüğünüz gibi listedeki elemanlardan sadece str veri tipinde olanlar sıralandı.


Örnek-5

sorted() fonksiyonuyla ilgili başka bir örnek yapalım. Örneğin, 4 adet .txt uzantılı dosya oluşturalım ve bu dosyaları da en son değiştirilme zamanlarına göre sıralayalım.

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

# Dosyaları basitçe şu şekilde oluşturalım.
for i in range(4):
    with open(f"dosya{i}.txt", "w", encoding="utf-8") as f: pass
    
# Şimdi ise bu dosyaları bir listeye kaydedelim.
from os import listdir, stat

dosyalar = [i for i in listdir(".") if i.endswith(".txt")]

# Dosyaları bir listeye kaydettik. 
# Şimdi bu dosyaları ve her bir dosyanın değiştirilme 
# zamanını sözlük tipinde bir veriye aktaralım.

sozluk = {i: stat(i).st_mtime: for i in dosyalar}

# Şimdi sıra geldi dosyalar listesindeki dosyaları değiştirilme
# zamanlarına göre sıralamaya.

print(sorted(dosyalar, key=sozluk.get))

Yukarıdaki kodları çalıştırdığımızda aşağıdaki gibi bir çıktı almamız gerekir::

['dosya3.txt', 'dosya2.txt', 'dosya1.txt', 'dosya0.txt']

Bu dosyalardan en son değiştirilen dosya dosya3.txt dosyası olduğu için listenin ilk elemanı o oldu.


Örnek-6

sorted() fonksiyonuyla ilgili başka bir örnek yapalım. Diyelim aşağıdaki gibi bir listemiz var ve bu listedeki elemanlar str veri tipindeler. Ve bu elemanlardan sayı olanları bir grup olarak sıralamak istiyoruz diyelim.

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

liste = ["1", "V", "C", "d", "j", "a", "A", "0", "3", "9", "2"]

print(sorted(a, key=str.isnumeric))

Yukarıdaki kodları çalıştırdığımızda şöyle bir çıktı almamız gerekir.

['V', 'C', 'd', 'j', 'a', 'A', '1', '0', '3', '9', '2']

Gördüğünüz gibi listedeki elemanlardan sayı olanlar diğer karakter dizilerinden ayrıldı. Bu karakterleri önce sıralayıp sonra da sayı ile sayı olmayan karakter dizilerini şöyle ayırabiliriz.

print(sorted(sorted(a), key=str.isnumeric))

Bu kodları çalıştırdığımızda ise şöyle bir çıktı almamız gerekiyor.

['A', 'C', 'V', 'a', 'd', 'j', '0', '1', '2', '3', '9']

Gördüğünüz gibi, önce büyük harfler kendi aralarında, daha sonra da küçük harfler kendi aralarında ve en son da sayılar kendi aralarında sıralandılar.

Küçük harflerin büyük harflerin önünde olmasını istiyoruz diyelim. Bu durumda şöyle bir kod yazardık.

print(sorted(sorted(a, key=str.isupper), key=str.isnumeric))

Bu kez de alacağımız çıktı şöyle olacaktı.

['d', 'j', 'a', 'V', 'C', 'A', '1', '0', '3', '9', '2']

Yukarıdaki çıktıya göre, küçük harfler, büyük harflerden önce, büyük harfler de sayılardan önce geliyor ancak bu grupların hiçbiri sıralı değil. sorted() fonksiyonunu bir daha kullanmayı deneyelim.

print(sorted(sorted(sorted(a), key=str.isupper), key=str.isnumeric))

Yukarıdaki kodları çalıştırdığımızda ise şöyle bir çıktı almamız lazım.

['a', 'd', 'j', 'A', 'C', 'V', '0', '1', '2', '3', '9']

Gördüğünüz gibi, bütün grupları da kendi içinde sıraladık.

sorted() fonksiyonuyla ilgili anlatacaklarımın sonuna geldik arkadaşlar. Zaman ayırıp okuduğunuz için teşekkür eder, hepinize saygı ve sevgilerimi iletirim.

4 Beğeni

sort'un ne yaptigini aciklayan bir yazida girdisini rastgele ve gorunmez yapmamani oneriyorum.

Cikti [1, 3, 6, 9, 9, 10]. E iyi guzel, giren neydi ki?
Cikti [5, 5, 5, 5, 5, 5]. Eeee?

1 Beğeni

Tamam, kodlar değiştirildi. Girdiler açıkça görülebilir.

1 Beğeni