Python Listeleri

Python'da "list" adlı harika bir yerleşik liste türü vardır. Liste değişmezleri köşeli parantez içinde [ ] yazılır. Listeler dizelere benzer şekilde çalışır. Verilere erişmek için len() işlevini ve köşeli parantezleri [ ] kullanın. İlk öğe dizinde 0 olarak gösterilir. (Resmi python.org listesi dokümanlarına bakın.)

  colors = ['red', 'blue', 'green']
  print(colors[0])    ## red
  print(colors[2])    ## green
  print(len(colors))  ## 3

"red" "blue" "green" dizelerinin listesi

Listelerde = içeren atama, kopya oluşturmaz. Bunun yerine, atama işlemi iki değişkeni bellekteki tek bir listeyi işaret eder.

  b = colors   ## Does not copy the list

hem colors hem de b bir listeyi işaret ediyor

"Boş liste", boş bir parantez çiftidir [ ]. "+", iki listeyi eklemek için kullanılır. Dolayısıyla [1, 2] + [3, 4] ifadesi [1, 2, 3, 4] sonucunu verir (bu, dizelerle kullanılan + işlevine benzer).

FOR ve IN

Python'un *for* ve *in* yapıları son derece kullanışlıdır. Bu yapıların ilk kullanımını listelerle göreceğiz. *for* yapısı (for var in list), bir listedeki (veya başka bir koleksiyondaki) her öğeye bakmanın kolay bir yoludur. Yineleme sırasında listeye öğe eklemeyin veya listeden öğe kaldırmayın.

  squares = [1, 4, 9, 16]
  sum = 0
  for num in squares:
    sum += num
  print(sum)  ## 30

Listede ne tür bir öğe olduğunu biliyorsanız döngüde bu bilgileri yakalayan bir değişken adı kullanın (ör. "num", "name" veya "url"). Python kodunda türleri hatırlatacak başka bir söz dizimi olmadığından, değişken adlarınız ne olduğunu anlamanız için önemli bir yoldur. (Bu biraz yanıltıcıdır. Python'u daha çok kullandıkça, işlev tanımlarınıza yazım bilgileri eklemenize olanak tanıyan tür ipuçlarına referanslar görürsünüz. Python, programlarınızı çalıştırırken bu tür ipuçlarından yararlanmaz. Bunlar, IDE'ler (entegre geliştirme ortamları) gibi diğer programlar ve işlevlerinizin uyumlu bağımsız değişkenlerle çağrılıp çağrılmadığını doğrulamak için linters/tür denetleyiciler gibi statik analiz araçları tarafından kullanılır.)

*in* yapısı tek başına bir öğenin bir listede (veya başka bir koleksiyonda) görünüp görünmediğini test etmenin kolay bir yoludur. value in collection, değerin koleksiyonda olup olmadığını test ederek Doğru/Yanlış değerini döndürür.

  list = ['larry', 'curly', 'moe']
  if 'curly' in list:
    print('yay') ## yay

for/in yapıları, Python kodunda çok yaygın olarak kullanılır ve liste dışındaki veri türlerinde çalışır. Bu nedenle, söz dizimilerini ezberlemeniz yeterlidir. Diğer dillerden alışkanlık edinmiş olabilirsiniz. Bu dillerde bir koleksiyon üzerinde manuel olarak iterasyona başlarsınız. Python'da ise for/in ifadesini kullanmanız yeterlidir.

Bir dize üzerinde çalışmak için for/in ifadesini de kullanabilirsiniz. Dize, karakterlerinin listesi gibi davranır. Bu nedenle for ch in s: print(ch), bir dizede bulunan tüm karakterleri yazdırır.

Aralık

range(n) işlevi 0, 1, ... n-1 sayılarını, range(a, b) ise a, a+1, ... b-1 sayılarını (son sayı hariç) döndürür. For döngüsü ile range() işlevinin kombinasyonu, geleneksel bir sayısal for döngüsü oluşturmanıza olanak tanır:

  ## print the numbers from 0 through 99
  for i in range(100):
    print(i)

Performans açısından hassas durumlar için tüm listeyi oluşturma maliyetinden kaçınan bir xrange() varyantı vardır (Python 3'te, range() iyi performans davranışına sahip olur ve xrange() fonksiyonunu unutabilirsiniz).

While döngüsü

Python'da standart bir süre döngüsü de vardır. *break* ve *continue* ifadeleri C++ ve Java'da olduğu gibi çalışarak en içteki döngünün seyrini değiştirir. Yukarıdaki for/in döngüleri, bir listedeki her öğe üzerinde iterasyon yapmayla ilgili yaygın sorunu çözer ancak while döngüsü, dizin numaraları üzerinde tam kontrol sahibi olmanızı sağlar. Listedeki her 3. öğeye erişen bir while döngüsü aşağıda verilmiştir:

  ## Access every 3rd element in a list
  i = 0
  while i < len(a):
    print(a[i])
    i = i + 3

Liste Yöntemleri

Diğer yaygın liste yöntemlerini aşağıda bulabilirsiniz.

  • list.append(elem) -- Listenin sonuna tek bir öğe ekler. Genel hata: Yeni listeyi döndürmez, yalnızca orijinali değiştirir.
  • list.insert(index, elem) -- Öğeyi belirtilen dizine ekler, öğeler sağa kaydırır.
  • list.extend(list2), list2'deki öğeleri listenin sonuna ekler. Bir listede + veya += kullanmak, extend() işlevini kullanmaya benzer.
  • list.index(elem): Belirtilen öğeyi listenin başından itibaren arar ve dizini döndürür. Öğe görünmüyorsa bir ValueError oluşturur (ValueError olmadan kontrol etmek için "in" işlevini kullanın).
  • list.remove(elem): Belirtilen öğenin ilk örneğini arar ve kaldırır (mevcut değilse ValueError hatası oluşturur)
  • list.sort(): Listeyi yerinde sıralar (döndürmez). (Daha sonra gösterilen sorted() işlevi tercih edilir.)
  • list.reverse() -- Listeyi yerinde tersine çevirir (döndürmez)
  • list.pop(index): Belirtilen dizindeki öğeyi kaldırıp döndürür. Dizin atlanırsa en sağdaki öğeyi döndürür (kabaca Insert() çağrısının tam tersi).

Bunların liste nesnesindeki *yöntemler* olduğuna, len() ise listeyi (veya dizeyi ya da başka bir şeyi) bağımsız değişken olarak alan bir işlev olduğuna dikkat edin.

  list = ['larry', 'curly', 'moe']
  list.append('shemp')         ## append elem at end
  list.insert(0, 'xxx')        ## insert elem at index 0
  list.extend(['yyy', 'zzz'])  ## add list of elems at end
  print(list)  ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz']
  print(list.index('curly'))    ## 2

  list.remove('curly')         ## search and remove that element
  list.pop(1)                  ## removes and returns 'larry'
  print(list)  ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']

Sık karşılaşılan hata: Yukarıdaki yöntemlerin, değiştirilmiş listeyi *iade etmediğini*, yalnızca orijinal listeyi değiştirdiğini unutmayın.

  list = [1, 2, 3]
  print(list.append(4))   ## NO, does not work, append() returns None
  ## Correct pattern:
  list.append(4)
  print(list)  ## [1, 2, 3, 4]

Liste Oluşturma

Sık kullanılan bir kalıp, bir listeyi boş liste [] olarak başlatmak ve ardından öğe eklemek için append() veya extend() işlevini kullanmaktır:

  list = []          ## Start as the empty list
  list.append('a')   ## Use append() to add elements
  list.append('b')

Dilimleri Listeleme

Dilimler, listelerde de dizelerde olduğu gibi çalışır ve listenin alt bölümlerini değiştirmek için de kullanılabilir.

  list = ['a', 'b', 'c', 'd']
  print(list[1:-1])   ## ['b', 'c']
  list[0:2] = 'z'    ## replace ['a', 'b'] with ['z']
  print(list)         ## ['z', 'c', 'd']

Alıştırma: list1.py

Bu bölümdeki materyali uygulamak için list1.py dosyasında sıralama kullanmayan sorunları (Temel Alıştırmalar bölümünde) deneyin.