Bu yazıda, Python liste anlayışlarını ve nasıl kullanılacağını öğreneceğiz.
Python'da Kavrama ve Döngü İçin Liste
Diyelim ki, kelimenin harflerini ayırmak ve harfleri human
bir listenin öğeleri olarak eklemek istiyoruz . Akla gelen ilk şey, for döngüsü kullanmak olacaktır.
Örnek 1: Döngü için Kullanarak bir dizede yineleme
h_letters = () for letter in 'human': h_letters.append(letter) print(h_letters)
Programı çalıştırdığımızda çıktı şöyle olacaktır:
('h', 'u', 'm', 'a', 'n')
Ancak Python, bu sorunu Liste Anlama'yı kullanarak çözmenin daha kolay bir yoluna sahiptir. Listeleri anlama, mevcut listeleri temel alan listeleri tanımlamanın ve oluşturmanın zarif bir yoludur.
Yukarıdaki programın liste anlayışları kullanılarak nasıl yazılabileceğini görelim.
Örnek 2: Liste Anlamayı Kullanarak Bir Dizede Yineleme
h_letters = ( letter for letter in 'human' ) print( h_letters)
Programı çalıştırdığımızda çıktı şöyle olacaktır:
('h', 'u', 'm', 'a', 'n')
Yukarıdaki örnekte, h_letter değişkenine yeni bir liste atanmıştır ve liste, yinelenebilir 'insan' dizesinin öğelerini içerir. print()
Çıkışı almak için fonksiyonu çağırıyoruz .
Liste Anlama Sözdizimi
(listedeki öğe için ifade)
Artık liste anlamalarının nerede kullanıldığını belirleyebiliriz.
Fark ettiyseniz human
, bir dizedir, liste değil. Bu, listeyi anlamanın gücüdür. Ne zaman bir dizi veya demet aldığını belirleyebilir ve üzerinde bir liste gibi çalışabilir.
Bunu döngüleri kullanarak yapabilirsiniz. Bununla birlikte, her döngü liste anlama olarak yeniden yazılamaz. Ancak, liste kavrayışlarını öğrendikçe ve alıştıkça, kendinizi bu zarif sözdizimi ile giderek daha fazla döngüyü değiştirirken bulacaksınız.
Anlaşmaları ve Lambda işlevlerini listeleyin
Listeler üzerinde çalışmanın tek yolu liste anlamaları değildir. Çeşitli yerleşik işlevler ve lambda işlevleri, listeleri daha az kod satırında oluşturabilir ve değiştirebilir.
Örnek 3: List içinde Lambda işlevlerini kullanma
letters = list(map(lambda x: x, 'human')) print(letters)
Programı çalıştırdığımızda çıktı
('insan')
Bununla birlikte, liste anlamaları genellikle lambda işlevlerinden daha okunabilirdir. Liste anlayışları kullanıldığında programcının neyi başarmaya çalıştığını anlamak daha kolaydır.
Liste Anlamada Koşullar
Liste anlayışları, mevcut listeyi (veya diğer demetleri) değiştirmek için koşullu ifadeyi kullanabilir. Matematiksel operatörler, tam sayılar ve range () kullanan bir liste oluşturacağız.
Örnek 4: Liste Kavrama ile if kullanma
number_list = ( x for x in range(20) if x % 2 == 0) print(number_list)
Yukarıdaki programı çalıştırdığımızda çıktı şöyle olacaktır:
(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)
Sayı_listesi, öğenin değeri 2'ye bölünebiliyorsa, 0-19 aralığındaki öğelerle doldurulur.
Örnek 5: Liste Kavrama ile İç İçe EĞER
num_list = (y for y in range(100) if y % 2 == 0 if y % 5 == 0) print(num_list)
Yukarıdaki programı çalıştırdığımızda çıktı şöyle olacaktır:
(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
Burada, anlama kontrollerini listeleyin:
- Y 2'ye bölünebilir mi, bölünmez mi?
- Y 5'e bölünebilir mi değil mi?
Y her iki koşulu da karşılarsa, y num_list'e eklenir.
Örnek 6: if… else Listeyi Anlama ile
obj = ("Even" if i%2==0 else "Odd" for i in range(10)) print(obj)
Yukarıdaki programı çalıştırdığımızda çıktı şöyle olacaktır:
("Çift", "Tek", "Çift", "Tek", "Çift", "Tek", "Çift", "Tek", "Çift", "Tek")
Here, list comprehension will check the 10 numbers from 0 to 9. If i is divisible by 2, then Even
is appended to the obj list. If not, Odd
is appended.
Nested Loops in List Comprehension
Suppose, we need to compute the transpose of a matrix that requires nested for loop. Let’s see how it is done using normal for loop first.
Example 7: Transpose of Matrix using Nested Loops
transposed = () matrix = ((1, 2, 3, 4), (4, 5, 6, 8)) for i in range(len(matrix(0))): transposed_row = () for row in matrix: transposed_row.append(row(i)) transposed.append(transposed_row) print(transposed)
Output
((1, 4), (2, 5), (3, 6), (4, 8))
The above code use two for loops to find transpose of the matrix.
We can also perform nested iteration inside a list comprehension. In this section, we will find transpose of a matrix using nested loop inside list comprehension.
Example 8: Transpose of a Matrix using List Comprehension
matrix = ((1, 2), (3,4), (5,6), (7,8)) transpose = ((row(i) for row in matrix) for i in range(2)) print (transpose)
When we run the above program, the output will be:
((1, 3, 5, 7), (2, 4, 6, 8))
In above program, we have a variable matrix which have 4
rows and 2
columns.We need to find transpose of the matrix. For that, we used list comprehension.
**Note: The nested loops in list comprehension don’t work like normal nested loops. In the above program, for i in range(2)
is executed before row(i) for row in matrix
. Hence at first, a value is assigned to i then item directed by row(i)
is appended in the transpose variable.
Key Points to Remember
- List comprehension is an elegant way to define and create lists based on existing lists.
- List comprehension is generally more compact and faster than normal functions and loops for creating list.
- However, we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.
- Unutmayın, her liste anlayışı for döngüsü içinde yeniden yazılabilir, ancak her for döngüsü liste anlama biçiminde yeniden yazılamaz.