Python’da Uygulamalı 25 Adet İpucu (Tricks)

Yiğit Şener
9 min readMar 29, 2020

--

Python programlama dilinde sıkça kullanılan ya da ne işe yaradığı tam olarak bilinmeyen kolaydan zora doğru 25 adet ipucunu bu yazıda paylaşıyorum. Hangi seviyede Python bilirseniz bilin eminim aşağıdaki maddelerden bazılarını yeniden hatırlamak isteyeceksiniz.

Aşağıdaki tüm kodlara GITHUB repom üzerinden erişebilirsiniz.

1. Bir Dizi İçinden Seçim Yapma

Python’da diziler genellikle liste, tuple ya da string içinde kullanılır. Aşağıdaki örneklerde bir liste içinden değerlere nasıl ulaşacağı gösterilmektedir. Aynı yöntemler tuple veya string içinde kullanılabilir.

# Bir liste oluşturalım
a = [1,3,5,7,9,11,13]
# Ardışık tek sırayla giden listeyi
# Range() fonksiyonuyla da oluşturabilirdik

a = [t for t in range(1,14,2)]
print(a)
# ÇIKTI: [1, 3, 5, 7, 9, 11, 13]

a[:3] # ilk üç değer
# ÇIKTI: [1, 3, 5]

a[2:] # ikinci değerden sonrakiler
# ÇIKTI: [5, 7, 9, 11, 13]

a[:] # tüm liste

# Liste içinde çoklu seçimi range() fonksiyonu
# gibi düşünülebilir.
# Örnek: a[başlangıç : durduğu yer : atlanılacak adım]

a[2:5] # 2. ve 5. sıra arasındaki sayıları veirir
# ÇIKTI: [5, 7, 9]

a[2:6:3] # 2. değer ile 6. Değer arasında 3 değer atalyacak
# 2. değerin karşığı 5
# 6. değer 13 ancak o hesaplamdan hariç tutulur
# ÇIKTI: [5, 11]

2. Bir Diziyi Tersine Çevirme

Verilen bir dizi üzerinde çoğu zaman for loop kullanarak tersine çevirebiliriz. Ancak daha performanslı olması açısından aşağıdaki yöntem daha efektif olacaktır. Bu yöntem liste, tuple ve string tiplerinde kullanılabilir.

birliste = [t for t in range(10,20,2)]
print(birliste)
# ÇIKTI: [10, 12, 14, 16, 18]

birliste[::-1] # tersine çeviren ifade
# ÇIKTI: [18, 16, 14, 12, 10]

# Aynı yöntemi tuple üzerinde deneyelim
birtuple = (10, 12, 14, 16, 18)
birtuple[::-1]
# ÇIKTI: (18, 16, 14, 12, 10)

# Bir string üzerinde deneyelim
birstring = "sosyoloji"
birstring[::-1]
# ÇIKTI: 'ijoloysos'

3. Tersine Çevirme ile İstenilen Bir Bölüme Ulaşma

Eğer bir dizi içerisinde tersinden ulaşmak istenilen bir bölümün alınması. Örneğin aşağıdaki yöntemle “sosyoloji” kelimesine sondan yaklaşarak sadece “loj” bölümü alınmıştır.

birstring = "sosyoloji"
birstring[::-1] # tersine çevirdiğimiz durum
birstring[-4:-1] # sadece "log" ifadesini aldığımız kısım
# ÇIKTI: 'loj'

4. Birden Çok Değişkenin Birlikte Atanması

Birden çok değişken aynı anda birden çok değer için atanabilir. Bu yöntem ile liste ve tuple içerisindeki elemanlarda birden çok değişkene tanımlanabileceği gibi listeler içerisindeki elemanların yerleri de aşağıdaki örnekteki gibi değiştirilebilir.

# a = 10 ve b = 15 değişkenleri aşağıdaki gibi yapılabilir
a, b = 10, 15
print(f'a = {a} ve b = {b} olduğu görülmektedir')
# ÇIKTI: 'a = 10 ve b = 15 olduğu görülmektedir'

# Değişkenlerdeki değerlerin birbiri ile yer değiştirmesi
a, b = b, a
print(f'a = {a} ve b = {b} olduğu görülmektedir')
# ÇIKTI: 'a = 15 ve b = 10 olduğu görülmektedir'

# Liste içindeki ilk ve son değerlerin yer değiştirmesi
birliste = [10, 12, 14, 16, 18]
birliste[0], birliste[-1] = birliste[-1], birliste[0]
birliste
# ÇIKTI: [18, 12, 14, 16, 10]

5. Boş Olan Dizilerin Kontrol Edilmesi

Bazı durumlarda verilen dizilerde (liste, tuple) içerisi boş olup olmadığını not ifadesini kullanarak kontrol edilebilir. Bu ifade ile sözlük ve set gibi veri tipleri içerisinde sorgulama sağlanabilir. Aşağıdaki örnekte bir liste içerisinde sırasıyla set, tuple, string, liste ve sözlük verilmiş olup bunların boş olup olmadığı kontrol edilmektedir

bosListe = [set(), (), "", [], {}] # liste içinde boş veri tipleri
for eleman in bosListe:
if not eleman: # eğer eleman yoksa
print(f"{type(eleman)} tipinde herhangi bir eleman yok")

# ÇIKTI: <class 'set'> tipinde herhangi bir eleman yok
# ÇIKTI: <class 'tuple'> tipinde herhangi bir eleman yok
# ÇIKTI: <class 'str'> tipinde herhangi bir eleman yok
# ÇIKTI: <class 'list'> tipinde herhangi bir eleman yok
# ÇIKTI: <class 'dict'> tipinde herhangi bir eleman yok

6. List Comprehensions İşlemleri

Python’da uzun listeler için birden çok satırda yazılan for döngülerinin yerini alan bir yapıdır list comprehension. Yazım şekli [işlem for eleman in döngü listesi if koşul ifadesi].

# Range ile bir liste oluşturması da bu metoda dahildir
birliste = [eleman for eleman in range(7,13)]
birliste
# ÇIKTI: [7, 8, 9, 10, 11, 12]

# Yarattığımız liste içindeki sayıların karesini alalım
birlisteninkaresi = [x**2 for x in birliste]
birlisteninkaresi
# ÇIKTI: [49, 64, 81, 100, 121, 144]

# kakerlerini bulduğumuz listede 81'den büyüklerin kare kökünü alalım
birlistekosul = [x**0.5 for x in birlisteninkaresi if x > 81]
birlistekosul
# ÇIKTI: [10.0, 11.0, 12.0]

7. Set Comprehensions İşlemleri

Set comprehension ile list comprehension yapı olarak birbirine benziyor gibi görünse de set comprehension içerisinde bulunan değerler her zaman tekil olarak oluşmaktadır.

birliste = [10,10,20,20,30,30,42] # bir liste oluşttu
# Bu listeyi {} içerisinde set comprehension yapısına dönüştürüyoruz
birset = {eleman / 2 for eleman in birliste}
birset
# ÇIKTI: {5.0, 10.0, 15.0, 21.0}
# Çıktıda görüldüğü üzere tekil sonuçlar yazılmıştır.

8. Dict (Sözlük) Comprehensions İşlemleri

Temel olarak liste ve set comprehension yöntemlerine benzerlik göstermesinin yanı sıra sözlük tipindeki anahtar — değer ilişkisinde veriler düzenlenebilmektedir.

birliste = [e for e in range(5)]
birsozluk = {x: x**2 for x in birliste}
birsozluk
# ÇIKTI: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

9. Generator Kullanımı

Python’da generator’ler bir döngü yaratmanın en sadeleştirilmiş halini oluşturabilirler. Uzun bir for döngüsü yazmak yerine genellikle yield operatörü ile performanslı sonuçlar sağlayabilirler.

Aşağıdaki örnekte ise list comprehension kullanımına benzer olarak generator’lerden bir örnek verilmiştir.

sum(x**2 for x in range(10))
# ÇIKTI: 285
max((x**2 for x in range(10)))
# ÇIKTI: 81

10. Tuple Çözümlemesi

Tuple veri yapısı Python’da yaygın bir şekilde kullanılmaktadır. İçinde bulunan veri kümesine erişimde listeler kadar geniş bir işleve sahip değildir. Tuple içerisinde bir elemente en uygun şekilde erişim indeksler ile sağlanabilir

birtuple = (5, 5.2,'yedi', 6, 7, 'sekiz')
print(f"Bu veri yapısı bir {type(birtuple)}'dır")
# ÇIKTI: Bu veri yapısı bir <class 'tuple'>'dır

# Farklı değişkenlere elementlerin atanması
a, b, c, d, e, f = birtuple
print(c, type(c))
# ÇIKTI: 'yedi' <class 'str'>

# Yıldız verilen değişken isimleri
# Diğer değişkenlerden kalan yerlerdeki verileri üzerine alır
x, *y, z = birtuple
print(x) # ÇIKTI: 5
print(y) # ÇIKTI: [5.2, 'yedi', 6, 7]
print(z) # ÇIKTI: 'sekiz'

*y,z = birtuple
print(y) # ÇIKTI: [5, 5.2, 'yedi', 6, 7]
print(z) # ÇIKTI: 'sekiz'

*_,y = birtuple
print(y) # ÇIKTI: 'sekiz'

11. For Döngüsünde Enumerate() Kullanımı

Bu fonksiyon sayesinde liste ya da tuple içerisindeki her bir elemana index atanabilir. Eğer fonksiyonun içerisine hiçbir değer verilmez ise saymaya 0'dan başlar.

birliste = ["istanbul","izmir","kars","kastamonu"]
for i,j in enumerate(birliste):
print(i,j)
# ÇIKTI: 0 istanbul
# ÇIKTI: 1 izmir
# ÇIKTI: 2 kars
# ÇIKTI: 3 kastamonu

# indeks 34'ten başlatılabilir
# Bu seger liste yerine tuple kullanılıyor
birtuple = ("istanbul","izmir","kars","kastamonu")
for i,j in enumerate(birliste,34):
print(i,j)
# ÇIKTI: 34 istanbul
# ÇIKTI: 35 izmir
# ÇIKTI: 36 kars
# ÇIKTI: 37 kastamonu

12. For Döngüsünde Reversed() Kullanımı

For döngüsünde normalde döngüye katılan elemanlar sırayla yazdırılırken bu fonksiyon sayesinde tersten sonuçlar dönmektedir.

birliste = ["Kahve","Meyve","Tatlı","Ana Yemek","Çorba"]
for eleman in reversed(birliste):
print(eleman)
# ÇIKTI: Çorba
# ÇIKTI: Ana Yemek
# ÇIKTI: Tatlı
# ÇIKTI: Meyve
# ÇIKTI: Kahve

13. Zip() Fonsiyonu

Zip() fonksiyonu birden çok listeyi ya da tuple objesini tek bir for döngüsünde birleştirmeyi sağlamaktadır. Ayrıca bu fonksiyonu tersine çevirmekte mümkündür.

meyveler = ["muz","elma","karpuz"]
adetler = [5,8,2]
kilolar = [1.5, 2.1, 3.8]

for meyve, adet, kilo in zip(meyveler,adetler,kilolar):
print(f"Meyve adı: {meyve}, Adet: {adet}, Kilo: {kilo}")
# ÇIKTI: Meyve adı: muz, Adet: 5, Kilo: 1.5
# ÇIKTI: Meyve adı: elma, Adet: 8, Kilo: 2.1
# ÇIKTI: Meyve adı: karpuz, Adet: 2, Kilo: 3.8

# zip() fonksiyonu tersine çevirme
zipli = zip(meyveler,adetler,kilolar)
x, y, z = zip(*zipli)
print(x)
# ÇIKTI: ('muz', 'elma', 'karpuz')

14. Sıralama için Lambda Fonksiyonunun Kullanımı

Lamda tek satırlı bir fonksiyon yaratma işlevine sahip bir metottur. Aşağıdaki örnekte verilen bir sözlük içerisinde değere göre lambda fonksiyonu ile nasıl sıralanacağı gösterilmektedir.

listeicindesozluk = [{'isim': 'Bursa', 'populasyon': 3.2},
{'isim': 'Ankara', 'populasyon': 5.6},
{"isim":"istanbul", 'populasyon': 15.5}]
# sıralama fonksiyonun çalıştırılması
sorted(listeicindesozluk, key = lambda x: x["populasyon"], reverse=True)
# ÇIKTI:
# [{'isim': 'istanbul', 'populasyon': 15.5},
# {'isim': 'Ankara', 'populasyon': 5.6},
# {'isim': 'Bursa', 'populasyon': 3.2}]

15. Tek Satırda “if” Koşulunun Yazılması

Koşula bağlı ifadeleri sadeleştirmek için uygulanan bir yöntemdir. Kullanma biçimi: a = b if koşul else diğer_b.

birliste = ["kara","hava","deniz"]
# Normal durumda koşullu ifade
if "kara" in birliste:
x = 1
else:
x = 0
print(x)
# ÇIKTI: 1

# Tek satırda yazımı
x = 3 if "deniz" in birliste else 0
print(x)
# ÇIKTI: 3

16. Tuple ve Liste için “in” Kullanımı

Yukarıdaki örnekte listeler içerisinde bir değer ararken “in” kullanılmıştı. Aşağıdaki örneklerde ise tuple ve sözlükler için olan kullanımı gösterilmektedir.

birtuple = (8,6,9,10,12345)
if 12345 in birtuple:
print("Bu değer tuple içerisinde var")
# ÇIKTI: Bu değer tuple içerisinde var

birsozluk = {"isim":"mehmet","bölge":"anadolu"}
if "isim" in birsozluk.keys():
print("Bu değer tuple içerisinde var")
# ÇIKTI: Bu değer tuple içerisinde var

17. Get() Fonksiyonu ile Sözlüklerde Hata Karşılama

Sözlüklerden bir veri çekmeye çalıştığımızda çıkan hatalar yerine belirlediğimiz bir değerin gösterilmesini istiyorsak get() fonksiyonunu aşağıdaki gibi kullanabilir.

birsozluk = {1:"x",2:"y",3:"z"}
birsozluk[1]
# CIKTI: 'x'

# Örneğin sözlükte bulunmayan 4 değerini çağıralım
birsozluk[4]
# Aşağıdaki gibi bir hata dönüyor
# Traceback (most recent call last):
# bizsozluk[4]
# KeyError: 4

# Hata yerine istediğimiz değeri verebiliriz
birsozluk.get(4,"Böyle bir key yok")
# ÇIKTI: 'Böyle bir key yok'

18. Bir Sözlükteki Değerlerden Maksimum ya da Minimum Bulma

Normalde bu işlem için öncelikle anahtar ve değerleri iki listeye ayırıp ardından değerlerin olduğu listenin maksimumunu alıp anahtar ile birleştirmemiz gerekmektedir. Ancak aşağıdaki kodda görüleceği üzere bunu tek satırda max() fonksiyonu ile yapmak mümkün aynı şekilde min() için de düşünülebilir.

modelSonuclari = {"SVM":0.78,"Regression":0.64,"Bayes":0.70}
# Normal yok
anahtar, deger = list(modelSonuclari.keys()), list(modelSonuclari.values())
print(anahtar) # ÇIKTI: ['SVM', 'Regression', 'Bayes']
print(deger) # ÇIKTI: [0.78, 0.64, 0.7]

# Maksimum değerden anahtarın bulunması
anahtar[deger.index(max(deger))]
# ÇIKTI: 'SVM'

# Kısa yol
max(modelSonuclari, key=modelSonuclari.get)
# ÇIKTI: 'SVM'

# minimum için
min(modelSonuclari, key=modelSonuclari.get)
# ÇIKTI: 'Regression'

19. Print() Fonksiyonunun Farklı Kullanımı (Debug)

Bu fonksiyon küçük çaptaki projeler için istisnaları yakalamada öğretici olabilir. Print() fonksiyonu içine if koşulunu da alarak aynı satırda ya da bir alt satırda göster gibi işlevleri yürütebilir.

# 11 rakamına kadar değerlerin bulunduğu bir liste oluşturalım.
birliste = [e for e in range(11)]
print(birliste)
# ÇIKTI: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Tek rakamları ve çift rakamları ayrı sütunlarda gösterelim
for i in birliste:
print("# ÇIKTI: ",i, end=", " if i % 2 == 1 else '\n' )
# ÇIKTI: 1, # ÇIKTI: 2
# ÇIKTI: 3, # ÇIKTI: 4
# ÇIKTI: 5, # ÇIKTI: 6
# ÇIKTI: 7, # ÇIKTI: 8
# ÇIKTI: 9, # ÇIKTI: 10

20. Walrus Operatör Kullanımı

Walrus operatörü (:=), Python 3.8 ve üstü sürümlerinde bulunan yeni bir özelliktir. Bu operatör bir ifade içindeki bir değişkene atama yapabilir. Genellikle, bir ifade bir değişken kullandığında, değişkenin daha önce bildirilmesi gerekirdi. Walrus operatörü ile değişken ataması ifadeye dahil edilebilir ve değişken hemen kullanılabilir.

birliste = [t for t in range(10)]
# if koşulundaki n liste içerisindeki eleman sayısına eşitleniyor
# Yani n eleman sayısı kadar bir rakam almış yeni bir değişken
if (n := len(birliste))%2 == 1:
print(f"{n} adet eleman listede yer almaktadır")
# ÇIKTI: '10 adet eleman listede yer almaktadır'

21. String’lerde split() ve rsplit() İşlemleri

String ifadeleri genellikle incelemek için liste formatına dönüştürülür. Bu dönüşümün nasıl olacağına dair en geniş işleve sahip olan fonksiyonlardan birisi de split() olup aşağıda örneklere yer verilmiştir.

birstring = "veri bilimi, alanında, oldukça, fazla, kaynak, bulunmaktadır."
# virgül ve boşluk dahil ayırarak liste içine alma
birstring.split(", ")
# ÇIKTI: ['veri bilimi', 'alanında', 'oldukça', 'fazla', 'kaynak', 'bulunmaktadır.']

# split(,x) x yazan yere verilen değer ile
# Bölmeye işlemine dahil edilmeyen karakter sayısı yazılır
birstring.split(", ",2)
# ÇIKTI: ['veri bilimi', 'alanında', 'oldukça, fazla, kaynak, bulunmaktadır.']

# rsplit(,x) ise tam tersi yönten başlayarak karakterleri ayırır
birstring.rsplit(", ",2)
# ÇIKTI: ['veri bilimi, alanında, oldukça, fazla', 'kaynak', 'bulunmaktadır.']

22. Bir Döngü İçinde String Birleştirme/Join() İşlemleri

Bir listede, sözlük ya da tuple içerisinde yer alan string ifadelerin istediğimiz bir karakter ile birleştirme işlemlerini join() fonsiyonu ile döngüsel olarak yapabiliriz.

kelimelerlistesi = ["masa","bilgisayar","haber"]
"%".join(kelimelerlistesi) # liste içerindeki kelimler seçilen karakter ile birleştiriliyor
# ÇIKTI: 'masa%bilgisayar%haber'

# sözlüklerde kullanımı
kelimlersozluk = {0: "masa", 1: "bilgisayar", 2: "haber"}
"+".join(kelimlersozluk.values())
# ÇIKTI: 'masa+bilgisayar+haber'

23. Map() Fonksiyonu

Bu fonksiyon başka fonksiyonların kendisi ile alacağı değeri de fonksiyonun içinden çalıştıran bir işleve sahiptir. Örneğin pow(x,y) fonksiyonu bir sayının karesini alır. x olan yere sayı, y olan kısma da alınacak üs değeri yazılır. Bu fonksiyonu aşağıdaki şekilde map() içinde kullanımı gösterilmiştir.

rakamlar = [1,2,3,4,5]
usler = [5,6,7,8,9]

# map() kullanımı
list(map(pow, rakamlar, usler))
# ÇIKTI: [1, 64, 2187, 65536, 1953125]

# list comprehensions yöntemi
[pow(x, y) for x, y in zip(rakamlar, usler)]
# ÇIKTI: [1, 64, 2187, 65536, 1953125]

24. Filter() Fonksiyonu

Filter() metodunun işlevi, belirtilen fonksiyon veya lambda işlevini kullanarak bir diziyi filtrelemektir. Bu fonksiyon bir döngü olan bir filtre nesnesini döndürür. Genel olarak, kullanımı map() fonksiyonuna çok benzer.

# harf listesi
harfler = ['a', 'b', 'd', 'e', 'i', 'j', 'o']

# sesli harfleri filtreleyen fonksiyon
def sesliHarfFiltresi(harfler):
sesliHarfler = ['a', 'e', 'i', 'o', 'u']

if(harfler in sesliHarfler):
return True
else
:
return False

sesliHarfleriFiltrele = filter(sesliHarfFiltresi, harfler)

# Sesli harf filtresinden çıkanlar
for harf in sesliHarfleriFiltrele:
print(f"Sesli harf {harf}")
# ÇIKTI: Sesli harf a
# ÇIKTI: Sesli harf e
# ÇIKTI: Sesli harf i
# ÇIKTI: Sesli harf o

25. Listede En Sık Bulunan Değerin Bulunması

Bir listede en sık geçen değerleri bulmak için max() ve set metotlarından yararlanarak aşağıdaki şekilde bulabiliriz.

kazananlar = ["ali","veli","veli","merve"]
max(set(kazananlar), key = kazananlar.count)
# ÇIKTI: 'veli'

Sonuç

25 adet ipucu ve umarım bir yerde işinize yarar. Python ya da herhangi bir programlama dili için bu işin ucu bucağı yok diyebiliriz. Tüm kısa yollara ve ipuçlarını bilmemiz mümkün değil ancak genel yapıyı kavrayabilirsek en azından aklımıza geldiği yerde araştırıp kodumuza eklediğimiz noktada kendimizi daha fazla geliştirmiş oluruz.

--

--