Farklı Türlerin Karşılaştırılması

10404

Python’da farklı türleri her zaman == ve != operatörleri ile karşılaştırılabilir. Karşılaştırılan türler int, float ve bool değilse farklı türleri karşılaştırma, içerikleri ne olursa olsun, == ile yapıldığında False, != ile yapıldığında True değerini verir.

Örnek:

>>> a = [1, 2, 3]
>>> b = (1, 2, 3)

>>> a == b
False
>>> a != b
True
>>> a == 3.14
False

Yani elma, 🍏, ile armudu, 🍐, karşılaştırdığımızda False cevabını alırız.


Önceden de belirttiğimiz gibi int, float ve bool türleri kendi aralarında tüm karşılaştırma operatörleri ile karşılaştırılabilirler. Bu durumda değerler karşılaştırılmaktadır.

>>> 10 == 10.0
True

>>> 1.0 == True
True

>>> 3.14 > 3
True

int, float ve bool dışındaki türlerin, farklı türlerle >, <, >=, <= operatörleri ile karşılaştırılması geçersiz bir durumdur ve exception’a yol açar.

>>> [1, 2] > (1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'list' and 'tuple'

Demet ve Listelerin Karşılaştırılması

İki demeti ve iki listeyi kendi arasında karşılaştırabiliriz. Bu durumda string’lerde olduğu gibi leksikografik karşılaştırma yapılır. Karşılaştırma, eşit olmayan elemana kadar devam eder.

>>> [1, 2, 3, 4, 5] > [1, 2, 3, 5, 1]
False

>>> [1, 2] < [1, 2, 3]
True

Demetler ve listelerin elemanları değişik türlerden olabilmektedir. Eğer karşılıklı elemanlar karşılaştırılabilir türden değilse TypeError exception oluşur.

>>> [10, 'ali', 20] > [10, 20 ,30]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'

Ama karşılaştırma erken biterse, örneğin ilk elemanda, bir exception oluşmaz:

>>> [10, 'ali', 20] > [11, 20 ,30]
False

Eğer listenin elemanları başka bir liste ya da demet, ya da demetin elemanları liste veya demet ise karşılaştırma özyinelemeli biçimde yapılır.

>>> [1, [2, 3, 4], 5] > [1, [2, 3, 5], 2]
False

Sözlüklerin Karşılaştırılması

İki sözlük nesnesi kendi aralarında sadece == ve != operatörleri ile karşılaştırılabilir. Bu durumda iki sözlüğün anahtar-değer çiftlerinin birebir aynı olup olunmadığına bakılır, sadece anahtar değil.

>>> {'ali': 10, 'veli': 20, 's': 30} == {'ali': 10, 'veli': 20, 's': 50}
False

Dikkat! Python 3.7 ve sonrasında sözlük elemanlarında dolaşım sırasında bir sıra söz konusu olsa da == ve != operatörleri bu biçimde leksikografik bir karşılaştırma yapmazlar. Yani eşitlik için karşılıklı anahtar-değer çiftlerinin eşitliğine değil tüm anahtar-değer çiftlerinin eşitliğine bakılmaktadır.

>>> {'ali': 30, 'veli': 30, 's': 40} == {'ali': 30, 's': 40, 'veli': 30}
True

Örneğin yukarıda bizim gördüğümüz sıralar farklı olsa da iki sözlük eşittir.

Kümelerin Karşılaştırılması

İki küme == veya != ile karşılaştırılabilir. Tüm elemanlar tamamen aynı ise karşılaştırma başarılı olur.

>>> {'ali', 100, 'veli', 120} == {100, 120, 'veli', 'ali'}
True

Kümelerde >, >=, < ve <= operatörleri küme işlemi yapmaktadır. Yani öz alt küme, öz üst küme, alt küme ve üst küme işlemleri gibi.

>>> {10, 'ali', 'veli'} > {10, 'veli'}
True

>>> set() < {'alper'}
True

set(), boş bir küme oluşturur.

10612