Veri Yapıları ve Algoritmalar için Gerekli Python Temelleri
Bu ders notlarında kullanılan bazı Python özellikleri, standart programlama derslerinde anlatılmayabilir. Bu sayfa size gerekli ön bilgiyi sağlayacaktır.
f-string, Python 3.6+ ile gelen, string içine değişken yerleştirmenin en kolay yoludur.
f"Metin {değişken} metin"
isim = "Ali"
yas = 25
print("İsim: {} Yaş: {}".format(isim, yas))
isim = "Ali"
yas = 25
print(f"İsim: {isim} Yaş: {yas}")
# f-string Örnekleri
isim = "Ayşe"
not_ortalamasi = 85.7
# Basit kullanım
print(f"Öğrenci: {isim}")
# Matematiksel işlem
print(f"5 + 3 = {5 + 3}")
# Ondalık basamak formatlama
print(f"Not ortalaması: {not_ortalamasi:.1f}")
print(f"Pi sayısı: {3.14159265:.2f}")
# Hizalama
for i in range(1, 4):
print(f"Sayı: {i:3d} - Karesi: {i**2:5d}")
Ternary if, bir koşulu tek satırda yazmamızı sağlar. Karmaşık görünebilir ama öğrenince çok pratiktir.
değer_eğer_doğruysa if koşul else değer_eğer_yanlışsa
if yas >= 18:
durum = "Yetişkin"
else:
durum = "Çocuk"
durum = "Yetişkin" if yas >= 18 else "Çocuk"
# Ternary If Örnekleri
# Örnek 1: Yaş kontrolü
yas = 17
durum = "Yetişkin" if yas >= 18 else "Çocuk"
print(f"Yaş: {yas} → {durum}")
# Örnek 2: Pozitif/Negatif
sayi = -5
isaret = "Pozitif" if sayi > 0 else "Negatif veya Sıfır"
print(f"Sayı: {sayi} → {isaret}")
# Örnek 3: Çift/Tek kontrolü
sayi = 7
sonuc = "Çift" if sayi % 2 == 0 else "Tek"
print(f"{sayi} → {sonuc} sayı")
# Örnek 4: Maksimum bulma
a, b = 10, 25
maksimum = a if a > b else b
print(f"Max({a}, {b}) = {maksimum}")
# Örnek 5: Boş liste kontrolü
liste = []
mesaj = "Liste dolu" if liste else "Liste boş"
print(mesaj)
Döngü ile liste oluşturmayı tek satıra indirger.
[ifade for eleman in liste][ifade for eleman in liste if koşul]
kareler = []
for i in range(5):
kareler.append(i ** 2)
kareler = [i ** 2 for i in range(5)]
# List Comprehension Örnekleri
# 1. Kareleri hesapla
kareler = [x**2 for x in range(6)]
print(f"Kareler: {kareler}")
# 2. Sadece çift sayılar (filtreli)
ciftler = [x for x in range(10) if x % 2 == 0]
print(f"Çift sayılar: {ciftler}")
# 3. Stringleri büyük harfe çevir
isimler = ["ali", "veli", "ayşe"]
buyuk_isimler = [isim.upper() for isim in isimler]
print(f"Büyük harfli: {buyuk_isimler}")
# 4. Negatif sayıları 0 yap
sayilar = [3, -1, 4, -5, 9, -2]
pozitifler = [x if x > 0 else 0 for x in sayilar]
print(f"Negatifler sıfırlandı: {pozitifler}")
Büyük sayıları okunabilir yapmak için Python'da alt çizgi kullanabilirsiniz. Python bu alt çizgileri yok sayar.
# Sayılarda okunabilirlik için alt çizgi
# Zor okunur:
buyuk_sayi1 = 1000000000
# Kolay okunur (Python bunu kabul eder):
buyuk_sayi2 = 1_000_000_000
print(f"Zor okunur: {buyuk_sayi1}")
print(f"Kolay okunur: {buyuk_sayi2}")
print(f"İkisi eşit mi? {buyuk_sayi1 == buyuk_sayi2}")
# Veri yapıları derslerinde sık kullanılır:
N = 1_000_000 # 1 Milyon
print(f"Test boyutu: {N:,} eleman")
Algoritmaların hızını ölçmek için time modülünü kullanırız.
time.time() → Şu anki zaman (saniye olarak)time.perf_counter() → Daha hassas ölçümKullanım: Başlangıç zamanını kaydet → İşlemi yap → Bitiş zamanını kaydet → Farkı hesapla
import time
# Basit zaman ölçümü şablonu
def olcumlu_toplama(n):
baslangic = time.time() # 1. Başlangıç
toplam = 0
for i in range(n):
toplam += i
bitis = time.time() # 2. Bitiş
gecen_sure = bitis - baslangic
return gecen_sure
# Test
for boyut in [100_000, 1_000_000, 10_000_000]:
sure = olcumlu_toplama(boyut)
print(f"{boyut:>12,} eleman: {sure:.4f} saniye")
Birden fazla değişkene aynı anda değer atayabilirsiniz.
# Tuple Unpacking Örnekleri
# 1. Basit çoklu atama
a, b, c = 1, 2, 3
print(f"a={a}, b={b}, c={c}")
# 2. Swap (değişkenleri takas etme)
x, y = 10, 20
print(f"Önce: x={x}, y={y}")
x, y = y, x # Geçici değişken gerekmez!
print(f"Sonra: x={x}, y={y}")
# 3. Fonksiyondan birden fazla değer döndürme
def min_max(liste):
return min(liste), max(liste)
minimum, maksimum = min_max([3, 1, 4, 1, 5, 9])
print(f"Min: {minimum}, Max: {maksimum}")
# 4. For döngüsünde
koordinatlar = [(0, 0), (1, 2), (3, 4)]
for x, y in koordinatlar:
print(f"Nokta: ({x}, {y})")
Bir listeyi gezerken hem elemanı hem de indeksini almak için kullanılır.
liste = ["a", "b", "c"]
i = 0
for eleman in liste:
print(i, eleman)
i += 1
liste = ["a", "b", "c"]
for i, eleman in enumerate(liste):
print(i, eleman)
# enumerate() Kullanımı
meyveler = ["Elma", "Armut", "Kiraz", "Üzüm"]
print("Meyve Listesi:")
for indeks, meyve in enumerate(meyveler):
print(f" {indeks}. {meyve}")
# Başlangıç indeksini değiştirme
print("\n1'den başlayarak:")
for sira, meyve in enumerate(meyveler, start=1):
print(f" {sira}. {meyve}")
None, Python'da "hiçbir şey" anlamına gelir. Linked List ve Tree yapılarında sıkça kullanılır.
== → Değerleri karşılaştırıris → Aynı obje mi diye bakar (bellek adresi)Kural: None kontrolü için her zaman is kullanın!
# None Kullanımı
# Linked List Node örneği
class Node:
def __init__(self, data):
self.data = data
self.next = None # Başlangıçta sonraki yok
# Node oluştur
node = Node(42)
print(f"Node verisi: {node.data}")
print(f"Sonraki node: {node.next}")
# None kontrolü (doğru yol)
if node.next is None:
print("Bu node'un sonrakisi yok (son eleman)")
# None kontrolü (kısa yol)
if not node.next:
print("Aynı anlama gelir")
# is vs == farkı
a = [1, 2, 3]
b = [1, 2, 3]
print(f"\na == b: {a == b}") # True (değerler aynı)
print(f"a is b: {a is b}") # False (farklı objeler)