Stilltu aðgerðir (t.d. að ákvarða sambandsmengi, afurðasett og undirmengi) með mengi Python

Viðskipti

Python býður upp á innbyggða gagnategund, sett, sem sér um sett.

Tegundarsettið er safn óafritaðra þátta (eininga sem eru ekki með sama gildi, einstakir þættir) og geta framkvæmt mengunaraðgerðir eins og sameiningarmengi, vörumengi og mismunamengi.

Í þessum hluta eru grunnaðgerðir í mengunaraðgerðum útskýrðar með sýnishornskóða.

  • Sköpun settra hluta:{},set()
  • stilltu skráningarmerki
  • Fjöldi þátta í settinu:len()
  • Að bæta þætti við sett:add()
  • Fjarlægðu frumefni úr mengi:discard(),remove(),pop(),clear()
  • Wasset (samruni, stéttarfélag):| rekstraraðili,union()
  • Vörusett (sameiginlegir hlutar, gatnamót, gatnamót):& rekstraraðili,intersection()
  • hlutfallsleg viðbót:-rekstraraðili,difference()
  • samhverfumismunasett:^ rekstraraðili,symmetric_difference()
  • undirmengi eða ekki:<= rekstraraðila,issubset()
  • Efri sett eða ekki:>= rekstraraðila,issuperset()
  • Ákvörðun um hvort þau séu innbyrðis aðal eða ekki:isdisjoint()

Setjagerðin er breytanleg tegund sem getur bætt við og eytt þáttum, og það er líka frosið sett tegund sem hefur sömu mengunaraðgerð og aðrar aðferðir og mengigerðin en er óbreytanleg (ekki hægt að breyta með því að bæta við, eyða eða breyta þáttum á annan hátt ).

Búa til sett hlut::{},set()

Myndað af bylgjusvigum {}

Hægt er að búa til hluti af tegundasetti með því að setja þætti í svigrúm {}.

Ef það eru tvöföld gildi eru þau hunsuð og aðeins einstök gildi eru eftir sem þættir.

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

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

Það er hægt að hafa mismunandi gerðir sem þætti. Hins vegar er ekki hægt að skrá uppfæranlega hluti eins og listategundir. Tuples eru leyfðir.

Einnig, þar sem settargerðir eru óraðaðar, er röðin sem þau eru mynduð í ekki geymd.

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

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

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

Mismunandi gerðir, eins og int og float, eru taldar afrit ef gildi þeirra eru jafngild.

s = {100, 100.0}

print(s)
# {100}

Þar sem tóm svig {} er álitin orðabókartegund, er hægt að búa til tómt mengi tegund hlut (tómt mengi) með því að nota smiðinn sem lýst er hér á eftir.

s = {}

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

Myndað af smiðjusetti()

Hluti af gerð mengi er einnig hægt að búa til með smiðjusettinu().

Ef tilgreindur er endurtekinn hlutur eins og lista eða tuple sem viðfangsefni myndast settur hlutur þar sem þættirnir eru eingöngu einstök gildi, með tvíteknum þáttum undanskildum.

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'>

Óbreytanlegar frozenset tegundir eru búnar til með constructor frozenset().

fs_l = frozenset(l)

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

Ef röksemdinni er sleppt er tómur hlutur úr mengi (tómt mengi) búinn til.

s = set()

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

Hægt er að fjarlægja tvítekna þætti af lista eða tuple með því að nota set(), en röð upprunalega listans er ekki varðveitt.

Til að umbreyta tegund setts í lista eða tuple, notaðu list(),tuple().

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

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

Sjá eftirfarandi grein til að fá upplýsingar um að fjarlægja tvítekin einingar á meðan röð er varðveitt, útdráttur aðeins afrita einingar og vinnslu tvítekinna þátta í tvívíða fylki (listi yfir lista).

stilltu skráningarmerki

Auk listaskilnings eru til settir skilningar. Skiptu einfaldlega út hornklofa [] fyrir axlabönd {} í listaskilningi.

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

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

Sjá eftirfarandi grein fyrir frekari upplýsingar um listaskilning.

Fjöldi þátta í settinu:len()

Hægt er að fá fjölda staka í mengi með innbyggðu fallinu len().

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

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

Ef þú vilt telja fjölda þátta í hverjum lista sem hefur þætti með tvíteknum gildum osfrv., sjá eftirfarandi grein.

Að bæta þætti við sett:add()

Notaðu add() aðferðina til að bæta þætti við sett.

s = {0, 1, 2}

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

Fjarlægðu frumefni úr mengi:discard(),remove(),pop(),clear()

Til að fjarlægja frumefni úr mengi, notaðu discard(), remove(), pop() og clear() aðferðirnar.

Discard() aðferðin eyðir þættinum sem tilgreint er í röksemdafærslunni. Ef gildi sem ekki er til í menginu er tilgreint er ekkert gert.

s = {0, 1, 2}

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

s = {0, 1, 2}

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

Remove() aðferðin fjarlægir einnig þáttinn sem tilgreindur er í viðfangsefninu, en villa KeyError er skilað ef gildi sem ekki er til í menginu er tilgreint.

s = {0, 1, 2}

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

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

Pop() aðferðin fjarlægir þætti úr mengi og skilar gildum þeirra. Það er ekki hægt að velja hvaða gildi á að fjarlægja. Tómt sett mun leiða til KeyError villa.

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'

Clear() aðferðin fjarlægir alla þætti og gerir mengið tómt.

s = {0, 1, 2}

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

Wasset (samruni, stéttarfélag):| rekstraraðili,union()

Stéttarfélagið (samruni, stéttarfélag) er hægt að fá með | rekstraraðila eða union() aðferðin.

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}

Hægt er að tilgreina mörg rök fyrir aðferð. Til viðbótar við mengunartegundina er einnig hægt að tilgreina lista og túlla sem hægt er að breyta í setttegundina með set() sem viðfangsefni. Sama gildir um síðari rekstraraðila og aðferðir.

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}

Vörusett (sameiginlegir hlutar, gatnamót, gatnamót):& rekstraraðili,intersection()

Vörusettið (sameiginlegur hluti, gatnamót og gatnamót) er hægt að fá með & rekstraraðila eða intersection() aðferð.

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}

hlutfallsleg viðbót:-rekstraraðili,difference()

Mismunamengið er hægt að fá með – rekstraraðilanum eða difference() aðferðinni.

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}

samhverfumismunasett:^ rekstraraðili,symmetric_difference()

Samhverfa mismunamengið (mengi þátta sem eru í aðeins einum af tveimur) er hægt að fá með ^ rekstraraðilanum eða symmetric_difference().

Jafngildir einkasundrun (XOR) í rökrænum aðgerðum.

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

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

undirmengi eða ekki:<= rekstraraðila,issubset()

Til að ákvarða hvort mengi sé hlutmengi af öðru mengi, notaðu <= rekstraraðilann eða issubset() aðferðina.

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

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

Bæði <= rekstraraðilinn og issubset() aðferðin skila satt fyrir jafngild mengi.

Til að ákvarða hvort það sé satt undirmengi, notaðu <= stjórnandann, sem skilar ósatt fyrir jafngild mengi.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

Efri sett eða ekki:>= rekstraraðila,issuperset()

Til að ákvarða hvort eitt mengi sé ofurmengi af öðru, notaðu >= rekstraraðilann eða útgáfusett().

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

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

Bæði >= rekstraraðilinn og issuperset() aðferðin skila satt fyrir jafngild mengi.

Til að ákvarða hvort það sé raunverulegt ofurmengi skaltu nota >= stjórnanda, sem skilar ósatt fyrir jafngild mengi.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

Ákvörðun um hvort þau séu innbyrðis aðal eða ekki:isdisjoint()

Til að ákvarða hvort tvö mengi séu frumefni hvert við annað, notaðu isdisjoint() aðferðina.

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

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True