Halmazműveletek (pl. unióhalmazok, termékhalmazok és részhalmazok meghatározása) a Python halmaz típusával.

Üzleti

A Python biztosít egy beépített adattípust, a set-et, amely a halmazokat kezeli.

A típushalmaz nem duplikált elemek (nem azonos értékű elemek, egyedi elemek) gyűjteménye, és olyan halmazműveleteket végezhet, mint az unióhalmaz, a szorzathalmaz és a különbséghalmaz.

Ebben a szakaszban a halmaz típusú halmazműveletek alapvető műveleteit ismertetjük mintakóddal.

  • Készletobjektumok létrehozása: {},set()
  • halmazbefogadási jelölés
  • A halmaz elemeinek száma:len()
  • Elem hozzáadása egy készlethez:add()
  • Elem eltávolítása egy halmazból: discard(),remove(),pop(),clear()
  • Wasset (egyesülés, egyesülés):|operátor,union()
  • Termékkészletek (közös alkatrészek, metszetek, kereszteződések):& operátor,intersection()
  • relatív komplement:-üzemeltető,difference()
  • szimmetriakülönbség-készlet:^ operátor,symmetric_difference()
  • részhalmaz vagy sem:<= operátor,issubset()
  • Felső készlet vagy sem:>= operátor,issuperset()
  • Annak meghatározása, hogy kölcsönösen prímek-e vagy sem:isdisjoint()

A set típus egy változtatható típus, amely elemeket adhat hozzá és törölhet, és létezik egy frozenset típus is, amely ugyanazzal a set művelettel és egyéb metódusokkal rendelkezik, mint a set típus, de megváltoztathatatlan (nem módosítható elemek hozzáadásával, törlésével vagy más módon történő módosításával).

Set objektum létrehozása:: {}, set()

Hullámzárójelek által generált {}

A set típusú objektumok úgy hozhatók létre, hogy az elemeket {} zárójelek közé zárjuk.

Ha vannak duplikált értékek, azokat a rendszer figyelmen kívül hagyja, és csak az egyedi értékek maradnak elemként.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>

Lehetőség van különböző típusok elemként való használatára. A frissíthető objektumok, például a listatípusok azonban nem regisztrálhatók. Tuplik engedélyezettek.

Továbbá, mivel a halmaz típusok rendezetlenek, a generálásuk sorrendje nem kerül tárolásra.

s = {1.23, 'abc', (0, 1, 2), 'abc'}

print(s)
# {(0, 1, 2), 1.23, 'abc'}

# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'

A különböző típusok, mint például az int és a float, duplikátumnak tekinthetők, ha értékeik egyenértékűek.

s = {100, 100.0}

print(s)
# {100}

Mivel az üres zárójel {} szótártípusnak minősül, egy üres halmaz típusú objektum (üres halmaz) a következőkben ismertetett konstruktorral hozható létre.

s = {}

print(s)
print(type(s))
# {}
# <class 'dict'>

A set() konstruktor által generált

A set típusú objektumok a set() konstruktorral is létrehozhatók.

Egy iterálható objektum, például egy lista vagy egy tuple argumentumként történő megadása egy olyan halmazobjektumot generál, amelynek elemei csak egyedi értékek, a duplikált elemek kizárásával.

l = [1, 2, 2, 3, 1, 4]

print(l)
print(type(l))
# [1, 2, 2, 3, 1, 4]
# <class 'list'>

s_l = set(l)

print(s_l)
print(type(s_l))
# {1, 2, 3, 4}
# <class 'set'>

A megváltoztathatatlan frozenset típusok a frozenset() konstruktorral hozhatók létre.

fs_l = frozenset(l)

print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>

Ha az argumentumot elhagyja, egy üres halmaz típusú objektum (üres halmaz) jön létre.

s = set()

print(s)
print(type(s))
# set()
# <class 'set'>

A duplikált elemek eltávolíthatók egy listából vagy tuple-ból a set() segítségével, de az eredeti lista sorrendje nem marad meg.

Ha egy halmaz típust listává vagy tuplévá szeretne konvertálni, használja a list(),tuple() parancsot.

l = [2, 2, 3, 1, 3, 4]

l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]

A duplikált elemek eltávolításáról a sorrend megőrzése mellett, a csak a duplikált elemek kivonásáról és a duplikált elemek feldolgozásáról kétdimenziós tömbben (listák listája) a következő cikkben olvashat.

halmazbefogadási jelölés

A listakövetelmények mellett vannak halmazkövetelmények is. Egyszerűen csak cseréljük ki a szögletes zárójeleket [] szögletes zárójelekre {} a listakövetelményekben.

s = {i**2 for i in range(5)}

print(s)
# {0, 1, 4, 9, 16}

A következő cikkben további információkat talál a listamegértés jelöléséről.

A halmaz elemeinek száma: len()

A halmaz elemeinek számát a len() beépített függvénnyel kaphatjuk meg.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(len(s))
# {1, 2, 3, 4}
# 4

Ha meg szeretné számolni az egyes listák azon elemeinek számát, amelyekben duplikált értékű elemek vannak, stb., lásd a következő cikket.

Elem hozzáadása egy készlethez: add()

Egy elem hozzáadásához egy halmazhoz az add() metódust használjuk.

s = {0, 1, 2}

s.add(3)
print(s)
# {0, 1, 2, 3}

Elem eltávolítása egy halmazból: discard(),remove(),pop(),clear()

Egy elem eltávolításához egy halmazból a discard(), remove(), pop() és clear() metódusokat használhatjuk.

A discard() metódus törli az argumentumban megadott elemet. Ha olyan érték van megadva, amely nem létezik a halmazban, akkor nem történik semmi.

s = {0, 1, 2}

s.discard(1)
print(s)
# {0, 2}

s = {0, 1, 2}

s.discard(10)
print(s)
# {0, 1, 2}

A remove() metódus szintén eltávolítja az argumentumban megadott elemet, de egy KeyError hibát ad vissza, ha olyan értéket ad meg, amely nem létezik a halmazban.

s = {0, 1, 2}

s.remove(1)
print(s)
# {0, 2}

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

A pop() metódus eltávolítja az elemeket egy halmazból, és visszaadja az értéküket. Nem lehet kiválasztani, hogy mely értékek kerüljenek eltávolításra. Az üres halmaz KeyError hibát eredményez.

s = {2, 1, 0}

v = s.pop()

print(s)
print(v)
# {1, 2}
# 0

s = {2, 1, 0}

print(s.pop())
# 0

print(s.pop())
# 1

print(s.pop())
# 2

# print(s.pop())
# KeyError: 'pop from an empty set'

A clear() metódus eltávolítja az összes elemet, és üressé teszi a halmazt.

s = {0, 1, 2}

s.clear()
print(s)
# set()

Wasset (egyesülés, egyesülés): |operátor, union()

Az unióhalmaz (egyesülés, unió) a | operátorral vagy az union() metódussal kapható.

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}

s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}

Egy módszerhez több argumentum is megadható. A set típuson kívül a set() segítségével set típusba konvertálható listák és tuplik is megadhatók argumentumként. Ugyanez vonatkozik a későbbi operátorokra és metódusokra is.

s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}

s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}

Termékkészletek (közös alkatrészek, metszetek, kereszteződések): & operátor, intersection()

A termékhalmaz (közös rész, metszet és metszéspont) az & operátorral vagy az intersection() metódussal kapható.

s_intersection = s1 & s2
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}

relatív komplement: -üzemeltető, difference()

A különbséghalmaz a – operátorral vagy a difference() módszerrel kapható.

s_difference = s1 - s2
print(s_difference)
# {0}

s_difference = s1.difference(s2)
print(s_difference)
# {0}

s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}

szimmetriakülönbség-készlet: ^ operátor, symmetric_difference()

A szimmetrikus különbséghalmaz (a kettő közül csak az egyikben szereplő elemek halmaza) a ^ operátorral vagy a symmetric_difference() paranccsal kapható meg.

A logikai műveletekben a kizárólagos diszjunkcióval (XOR) egyenértékű.

s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}

s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}

részhalmaz vagy sem: <= operátor, issubset()

Annak megállapításához, hogy egy halmaz egy másik halmaz részhalmaza-e, használja a <= operátort vagy az issubset() metódust.

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

A <= operátor és az issubset() metódus is igazat ad vissza egyenértékű halmazok esetén.

Annak megállapításához, hogy igaz részhalmazról van-e szó, használja a <= operátort, amely egyenértékű halmazok esetén hamis értéket ad vissza.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

Felső készlet vagy sem: >= operátor, issuperset()

Annak meghatározásához, hogy egy halmaz egy másik halmaz szuperhalmaza-e, használja a >= operátort vagy az issuperset() függvényt.

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

A >= operátor és az issuperset() metódus is igazat ad vissza egyenértékű halmazok esetén.

Annak megállapításához, hogy igaz szuperhalmazról van-e szó, használjuk a >= operátort, amely egyenértékű halmazok esetén hamis értéket ad vissza.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

Annak meghatározása, hogy kölcsönösen prímek-e vagy sem: isdisjoint()

Annak megállapításához, hogy két halmaz prím-e egymáshoz képest, az isdisjoint() metódust használjuk.

s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True
Copied title and URL