Python: Adatszerkezetek II. – set

set = halmaz

Olyan adatszerkezet, mely az elemek rendezetlen gyűjteménye és benne minden elem csak egyszer fordulhat elő.

Legtöbbször arra használjuk, hogy ellenőrizzük, egy adott elem szerepel-e az adathalmazban, illetve az elemek kettőzésének (duplikálásának) kiszűrésére is szoktuk alkalmazni.

Jele: {}

Halmaz létrehozása

halmaz1 = {1, 2, 3, 4, 5}
halmaz2 = {1, 2.3, „Szia!”, True}
print(type(halmaz2))
halmaz3 = set()

Alapvető halmazműveletek

A Python halmazaival ugyanazokat a műveleteket végezhetjük el, mint matek órán. 🙂

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7}

  1. unió: print(A | B)     vagy     print(A.union(B))
  2. metszet: print(A & B)     vagy     print(A.intersection(B))
  3. különbség: print(A − B)     vagy     print(A.difference(B))
  4. szimmetrikus különbség: print(A ^ B)     vagy     print(A.symmetric_difference(B))

Tartalmazás vizsgálata

print(1 in A)      ↦ True
print(1 in B)      ↦ False

Halmazok metódusai

halmaz.add(6)
halmaz.add(1)
halmaz.update([10,11,12])     (Listát is tehetünk a halmazba.)
halmaz.remove(2)     (Ez hibát ad, ha nincs benne a törlendő elem.)
halmaz.discarde(2)     (Ez nem ad hibát.)
halmaz.clear()     (Az összes elemet törli a halmazból.)
halmaz1.issubset(halmaz2)     (Megvizsgálja, hogy a halmaz1 részhalmaza-e a halmaz2-nek.)
halmaz1.issuperset(halmaz2)     (Az előző megfordítása, azaz azt vizsgálja meg, hogy a halmaz1 szülő halmaza-e a halmaz2-nek. Tehát, hogy a halmaz2 részhalmaza-e a halmaz1-nek?)

Halmaz bejárása

for i in halmaz2:
     print(i)
Ez egy véletlenszerű bejárás lesz, hiszen nem kötött a sorrend.

Egy példa program

halmaz1 = {"alma", "körte", "szilva", "cseresznye", "meggy", "dió"}

# Ha többször futtatjuk a programot, más-más sorrendben írja ki a gyümölcsöket
for gyumi in halmaz1:
    print(gyumi, end="; ")

print()

print("meggy" in halmaz1)

halmaz1.add("barack")
print(halmaz1)

print()

halmaz1.update(["narancs", "banán", "mandarin"])
print(halmaz1)

print("A halmaz ", len(halmaz1), " elemet tartalmaz.")

print()

# Ha az eltávolítandó elem nem létezik, akkor a remove() hibát okoz.
halmaz1.remove("cseresznye")
# Ha az eltávolítandó elem nem létezik, akkor a discard() NEM okoz hibát.
halmaz1.discard("mandarin")
print(halmaz1)

print()

# Az utolsó elem eltávolítása
# Mivel a halmaz rendezetlen, ezért nem tudni, hogy a pop() melyik elemet fogja törölni
halmaz1.pop()
print(halmaz1)

print()

# halmaz1.clear(): Az összes elemet eltávolítja a halmazból, de maga a halmaz megmarad.
# del(halmaz): Magát a halmazt törli.

# Listából is lehet halmazt készíteni
lista = ["málna", "dinnye", "eper", "eper", "eper", "alma"]
halmaz2 = set(lista)
gyumolcsok = set() # Üres halmaz létrehozása

# Két halmaz metszete: &
metszet = halmaz1 & halmaz2
print("Metszet: ", metszet)
print()

# Két halmaz uniója: | (pipe=cső)
unio = halmaz1 | halmaz2
print("Unió: ", unio)

print()

kulonbseg = halmaz1 - halmaz2
print("Különbség: ", kulonbseg)

print()

szimmetrikus_kulonbseg = halmaz1 ^ halmaz2
print("Szimmetrikus különbség: ", szimmetrikus_kulonbseg)