- Demet oluşturmak ve onu açmak (unpacking)
- Liste, demet ve küme arasındaki farkı açıklamak
- Kümelerle tekrarları silmek ve birleşim, kesişim, fark işlemlerini yapmak
Bazı veriler asla değişmemelidir: haftanın günleri, Bakü'nün coğrafi koordinatları, bir rengin RGB kodu. Bazen de yalnızca tekrarsız değerlere ihtiyaç duyarsın: örneğin bir siteye hangi şehirlerden girildiğini bilmek istiyorsun ama her şehri bir kez saymak şartıyla. Python'da bu iki iş için özel türler vardır: demet ve küme.
Demetler
Normal parantez () içinde yazılan sıralı bir değerler topluluğu. Listeye benzer ama oluşturulduktan sonra değiştirilemez.
baku = (40.41, 49.87)
print(baku)
print(baku[0])
print(len(baku))
days = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')
print(days[-1], days.index('Wed'))▸ Beklenen çıktı
(40.41, 49.87) 40.41 2 Sun 2
İndeksler, dilimler, len(), in ve for döngüsü demetlerde de çalışır. Ama days[0] = 'Monday' yazarsan Python TypeError: 'tuple' object does not support item assignment hatası verir. Bu aslında bir avantajdır: programın hiçbir parçası önemli verileri yanlışlıkla değiştiremez.
Demetlerin en kullanışlı özelliği açmadır (unpacking): elemanları tek satırda ayrı değişkenlere yazabilirsin. Aynı yöntemle iki değişkenin değerini yardımcı bir değişken olmadan yer değiştirebilirsin.
lat, lon = (40.41, 49.87)
print('Latitude:', lat)
print('Longitude:', lon)
a = 5
b = 8
a, b = b, a
print(a, b)▸ Beklenen çıktı
Latitude: 40.41 Longitude: 49.87 8 5
Açma, döngülerde de çalışır. enumerate() fonksiyonu her elemanı numarasıyla birlikte (numara, eleman) demeti olarak verir; bir listeyi numaralandırmanın en kolay yolu budur. start=1, saymanın 1'den başlamasını sağlar.
students = ['Aysel', 'Murad', 'Leyla']
for number, name in enumerate(students, start=1):
print(f'{number}. {name}')
print(list(enumerate('ab')))▸ Beklenen çıktı
1. Aysel 2. Murad 3. Leyla [(0, 'a'), (1, 'b')]
Kümeler
Süslü parantez {} içinde yazılan, tekrarsız elemanlardan oluşan bir topluluk. Kümede elemanların sırası yoktur, bu yüzden indeks kullanılamaz.
Küme tekrarları otomatik olarak atar. Bir listeyi set() fonksiyonuna verirsen her değerden yalnızca biri kalır. Kümenin sırası olmadığı için onu düzgün yazdırmak amacıyla sorted() ile sıralarız.
print({3, 1, 2, 3, 1})
visitors = ['Baku', 'Ganja', 'Baku', 'Shaki', 'Ganja', 'Baku']
unique = set(visitors)
print(len(visitors), len(unique))
print(sorted(unique))
unique.add('Quba')
unique.add('Baku')
print(len(unique))
print('Shaki' in unique)▸ Beklenen çıktı
{1, 2, 3}
6 3
['Baku', 'Ganja', 'Shaki']
4
TrueDikkat: 'Baku' zaten kümede olduğu için onu yeniden eklemek hiçbir şeyi değiştirmedi; eleman sayısı 5 değil, 4 oldu. in ile kontrol, kümelerde listelere göre çok daha hızlı çalışır.
“the sun and the moon and the stars” cümlesinde kaç kelime var ve bunların kaçı tekrarsız?
Çözümü gösterÇözümü gizle
split() cümleyi 8 kelimelik bir listeye böler.set() tekrarları atar; geriye the, sun, and, moon, stars kalır.Cevap: 8 kelime, bunların 5'i tekrarsız.
text = 'the sun and the moon and the stars'
words = text.split()
print(len(words), 'words,', len(set(words)), 'unique')▸ Beklenen çıktı
8 words, 5 unique
Küme işlemleri
Matematikten bildiğin küme işlemleri Python'da tek bir sembolle yazılır. Diyelim ki okulda bir satranç kulübü ve bir robotik kulübü var. Hangi öğrenciler ikisine de gidiyor?
| İşlem | Yazım | Sonuç |
|---|---|---|
| Birleşim | a | b | a'da ya da b'de olan tüm elemanlar |
| Kesişim | a & b | hem a'da hem b'de olanlar |
| Fark | a - b | a'da olup b'de olmayanlar |
| Simetrik fark | a ^ b | yalnızca birinde olanlar |
chess = {'Aysel', 'Murad', 'Elvin'}
robotics = {'Murad', 'Leyla', 'Elvin', 'Nigar'}
print(sorted(chess & robotics))
print(sorted(chess | robotics))
print(sorted(chess - robotics))
print(sorted(chess ^ robotics))▸ Beklenen çıktı
['Elvin', 'Murad'] ['Aysel', 'Elvin', 'Leyla', 'Murad', 'Nigar'] ['Aysel'] ['Aysel', 'Leyla', 'Nigar']
Hangisini seçmeli?
| Özellik | Liste | Demet | Küme |
|---|---|---|---|
| Yazım | [1, 2] | (1, 2) | {1, 2} |
| Değiştirilebilir mi? | evet | hayır | evet |
| Sıralı mı? | evet | evet | hayır |
| Tekrar olabilir mi? | evet | evet | hayır |
| Ne zaman kullanılır? | değişen bir topluluk | sabit veriler | tekrarsız elemanlar, hızlı arama |
results listesinin her elemanı bir ad ve puandan oluşan bir demettir, örneğin ('Aysel', 91). enumerate() ve demet açmayı kullanarak sonuçları 1'den başlayan numaralarla, 1. Aysel - 91 biçiminde yazdır.
results = [('Aysel', 91), ('Murad', 78), ('Leyla', 85)]
# print: 1. Aysel - 91, then 2. Murad - 78, ...▸ Beklenen çıktı
1. Aysel - 91 2. Murad - 78 3. Leyla - 85
Bir kulübe pazartesi ve salı günü gelen öğrencilerin listeleri verilmiş (adlar tekrar edebilir). Kümeleri kullanarak üç satır yazdır: 1) pazartesi kaç farklı öğrenci geldi, 2) iki gün de gelenlerin alfabetik listesi, 3) toplamda kaç farklı öğrenci geldi.
monday = ['Aysel', 'Murad', 'Leyla', 'Aysel', 'Elvin']
tuesday = ['Leyla', 'Nigar', 'Murad', 'Nigar']
# 1) number of different pupils on Monday
# 2) sorted list of pupils who came on both days
# 3) number of different pupils in total▸ Beklenen çıktı
4 ['Leyla', 'Murad'] 5
Önemli noktalar
- Demet,
()içinde sıralı ama değiştirilemeyen bir topluluktur. - Açma, tek satırda birkaç değişkene değer atar:
lat, lon = point. - Küme,
{}içinde tekrarsız ve sırasız elemanlardır;set(list)tekrarları siler. |birleşimi,&kesişimi,-farkı,^simetrik farkı verir.- Boş küme
set()ile oluşturulur;{}boş bir sözlüktür.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.