Menu

Python range(): Başlangıç, Bitiş, Adım ve Geri Sayım

Python'da range() nasıl çalışır — start, stop, step, negatif range'ler ve bir liste oluşturmak yerine neden lazy (tembel) davranır.

Sayı Üretmek İçin Bir Araç

range() tam olarak bir işi yapar: bir tamsayı dizisi üretir. Belirli bir sayıda iterasyon yapman ya da sayısal bir aralıkta dolaşman gerektiğinde for döngülerinin vazgeçilmez ortağıdır.

En basit hali tek bir argüman alır — stop değeri:

main.py
Output
Click Run to see the output here.

Çıktı:

0
1
2
3
4

Yeni başlayanları yakalayan iki detay:

  1. Sayma 0'dan başlar. range(5) sana 0'dan başlayan beş sayı verir.
  2. Stop değeri dışlayıcıdır. range(5), 5'ten önce durur — 5'in kendisini dahil etmez.

Bu kurallar Python'un dilimleme (slicing), indeksleme ve range işlemlerinde tutarlıdır. "Stop dışlayıcıdır" fikrini bir kez içselleştirdiğinde seni tökezletmez olur.

Üç Biçim

range() bir, iki veya üç argüman alır:

main.py
Output
Click Run to see the output here.

Step, her sıçramanın boyudur. range(0, 20, 4) her dördüncü sayıyı üretir. Bir dahaki "iki atlamalı öğe" ya da "onuncu örnek" ihtiyacında bunu aklında tut.

Geri Sayım

Adım negatif olabilir, bu da geriye doğru sayma imkânı verir:

main.py
Output
Click Run to see the output here.

Yine, stop dışlayıcıdır — range(10, 0, -1), 0'dan önce durur, 0'da değil. 0'ı dahil etmek için stop'u -1 yap:

main.py
Output
Click Run to see the output here.

range Lazy'dir

Python 3'te range(), bellekte bir sayı listesi oluşturmaz. İstek üzerine sayıları tek tek üreten hafif bir range nesnesi döndürür. Bu yüzden şunu yazabilirsin:

main.py
Output
Click Run to see the output here.

Milyarlık bir "range" neredeyse hiç bellek kullanmaz. Sayılar, döngü onları istedikçe üretilir.

Gerçekten sayıların bir listesine ihtiyacın varsa — çünkü onu değiştirmek, sıralamak ya da temel ötesinde indekslemek istiyorsan — açıkça dönüştür:

main.py
Output
Click Run to see the output here.

Çoğu zaman listeye ihtiyacın olmaz. for i in range(...) doğrudan çalışır.

Sık Kullanılan Kalıplar

Sürekli başvuracağın birkaç tarif:

Bir şeyi n kez yap.

main.py
Output
Click Run to see the output here.

_, "bu değeri umursamıyorum" anlamına gelen bir gelenektir — Python zorla uygulatmaz ama herhangi bir okuyucu niyeti hemen anlar.

Bir diziye indeksle gir.

range(len(...)) yerine enumerate() tercih et; ama özellikle sadece index'e ihtiyacın varsa:

main.py
Output
Click Run to see the output here.

Yine de çoğu zaman enumerate(items) daha temizdir.

Her ikinci elemanı dolaş.

main.py
Output
Click Run to see the output here.

Bu a, c, e yazdırır. Basit dilimleme için dilimleme söz dizimi daha da doğrudandır: items[::2].

Hızlıca sayısal bir liste üret.

main.py
Output
Click Run to see the output here.

Bu bir list comprehension — ileride işlenecek — ama sayıları sağlayan range.

range() Ne Değildir

Bilmeye değer iki keskin köşe:

  1. range yalnızca tamsayı üretir. Kayan noktalı adımlara ihtiyacın varsa (örneğin 0.0'dan 1.0'a 0.1 artışlarla) numpy.arange ya da kendi sayacını kullanan bir döngü kullan.
  2. range rastgele iterable'larla çalışmaz. Özellikle tamsayılar içindir. Bir liste üzerinde "range" yapmaya çalışıyorsan muhtemelen enumerate ya da doğrudan listenin kendisini arıyorsundur.

Bir Araya Getirelim

Birden fazla varyasyonu kullanan küçük bir örnek:

main.py
Output
Click Run to see the output here.

İç içe iki range tabanlı döngü, bir ızgara üretiyor. Her iki döngünün de 1'den başladığına dikkat et — range(1, 6) — çünkü 1'den 5'e kadar etiketler istiyoruz.

Koleksiyonlara Geçiş

Artık koşulları, iki tür döngüyü ve range'i gördün. Bu, herhangi bir koleksiyonu sürmek için yeterli kontrol akışı. Sonraki bölüm: koleksiyonların kendisi — listeler, tuple'lar, set'ler ve sözlükler.

Sıkça Sorulan Sorular

Python'da range() ne yapar?

range() bir tamsayı dizisi üretir. range(n) 0'dan n-1'e kadar verir. range(start, stop) start'tan stop'a kadar (stop dahil değil) tamsayılar verir. range(start, stop, step) adım boyunu seçmene izin verir; geri saymak için negatif adımlar dahil.

range() bir liste mi oluşturur?

Hayır. Python 3'te range() istek üzerine sayı üreten hafif bir range nesnesi döndürür. Bu yüzden range(10**9) anındadır — aslında milyarlarca tamsayı tahsis etmez. Gerçekten bir listeye ihtiyacın varsa list(...) ile sar.

Python'da range() ile nasıl geri sayarım?

Negatif adım kullan: range(10, 0, -1) 10, 9, 8, ..., 1 sayar. stop değerinin her zaman dışlayıcı olduğunu unutma; 0'ı dahil etmek için range(10, -1, -1) gerekir.

Coddy ile kodlamayı öğren

BAŞLA