Daha önce Mirat Can Bayrak'ın anlatmış olduğu map() ve filter() fonksiyonlarının yaptığı işleri ve çok daha fazlasını yapabilmemize olanak sağlar. Anlaşılması biraz zor gelebilir fakat alıştıktan sonra hayat kurtarıcı olabiliyor. Sözü fazla uzatmadan hemen örnekler üzerinde açıklamaya başlayalım.
İlk örneğimiz map() fonksiyonunun anlatıldığı örneğin aynısı olsun
In [65]: def sayhello(to_who):
print "hello %s" %to_who
....:
....:
In [67]: people = ('Ahmet','Mehmet','Hale','Jale','Bülent')
In [68]: [sayhello(i) for i in people] #lc (List Comprehension)'ın olayı burada başlıyor. Kolay anlayabilmek için sağdan-sola doğru okuyunuz. "i İnsanların içerisinde olduğu sürece sayhello() fonksiyonunu çalıştır"
hello Ahmet
hello Mehmet
hello Hale
hello Jale
hello Bülent
Örneklere yine Mirat Can Bayrak'ın filter()
fonksiyonunu anlattırken kullandığı tek sayilar üzerinden gidelim.
In [72]: [i for i in range(10) if i%2!=0] #Gördüğünüz gibi lc içerisinde if koşullarınıda kullanabiliyoruz.
Out[72]: [1, 3, 5, 7, 9]
Biraz abartıp iç içe döngüleri kullarak sadece TEK satırda amatör bir çarpım tablosu bile yapabiliriz.
In [77]: [[i*j for i in range(1,10)] for j in range(1,11)]
Out[77]:
[[1, 2, 3, 4, 5, 6, 7, 8, 9],
[2, 4, 6, 8, 10, 12, 14, 16, 18],
[3, 6, 9, 12, 15, 18, 21, 24, 27],
[4, 8, 12, 16, 20, 24, 28, 32, 36],
[5, 10, 15, 20, 25, 30, 35, 40, 45],
[6, 12, 18, 24, 30, 36, 42, 48, 54],
[7, 14, 21, 28, 35, 42, 49, 56, 63],
[8, 16, 24, 32, 40, 48, 56, 64, 72],
[9, 18, 27, 36, 45, 54, 63, 72, 81],
[10, 20, 30, 40, 50, 60, 70, 80, 90]]
Lc ile yapabilecekleriniz sizin yaratıcılığınıza kalmış
>>> [i for i in range(3,100,2) if (i%3!=0 and i%5!=0 and i%7!=0)]
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] #asal sayılar.
In [90]: us_al=dict([(i,i**2) for i in range(2,10)]) #dict() ile lc'den aldığımız veriyi bir sözlüğüde aktarabiliyoruz.
In [91]: us_al
Out[91]: {2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Hiç yorum yok:
Yorum Gönder