Weka shughuli (k.m., kuamua seti za muungano, seti za bidhaa, na vifaa vidogo) na aina ya seti ya Python

Biashara

Python hutoa aina ya data iliyojengwa, iliyowekwa, ambayo inashughulikia seti.

Seti ya aina ni mkusanyiko wa vipengele visivyo na nakala (vipengee ambavyo si thamani sawa, vipengee vya kipekee) na vinaweza kutekeleza shughuli za seti kama vile seti za muungano, seti ya bidhaa na seti tofauti.

Katika sehemu hii, shughuli za msingi katika shughuli za kuweka aina zinaelezewa na msimbo wa sampuli.

  • Uumbaji wa vitu vilivyowekwa:{},set()
  • weka nukuu ya kujumuisha
  • Idadi ya vipengele katika seti:len()
  • Kuongeza Kipengele kwenye Seti:add()
  • Ondoa kipengele kutoka kwa seti:discard(),remove(),pop(),clear()
  • Wasset (muungano, muungano):| mwendeshaji,union()
  • Seti za bidhaa (sehemu za kawaida, makutano, makutano):& mwendeshaji,intersection()
  • jamaa inayosaidia:-endeshaji,difference()
  • seti ya tofauti ya ulinganifu:^ mwendeshaji,symmetric_difference()
  • sehemu ndogo au la:<= mwendeshaji,issubset()
  • Seti ya juu au la:>= mwendeshaji,issuperset()
  • Uamuzi wa kama wao ni wakuu au la:isdisjoint()

Aina ya seti ni aina inayoweza kugeuzwa inayoweza kuongeza na kufuta vipengele, na pia kuna aina ya seti iliyogandishwa ambayo ina utendakazi wa kuweka sawa na mbinu zingine kama aina iliyowekwa lakini haiwezi kubadilika (haiwezi kurekebishwa kwa kuongeza, kufuta au kurekebisha vipengele. )

Uundaji wa kitu kilichowekwa::{},set()

Imetolewa na mabano ya wimbi {}

Vipengee vya seti ya aina vinaweza kuundwa kwa kufunga vipengee kwenye viunga {}.

Ikiwa kuna nakala za thamani, hazizingatiwi na ni zile za kipekee pekee zinazosalia kama vipengele.

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

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

Inawezekana kuwa na aina tofauti kama vipengele. Hata hivyo, vitu vinavyoweza kusasishwa kama vile aina za orodha haviwezi kusajiliwa. Tuples inaruhusiwa.

Pia, kwa kuwa aina zilizowekwa hazijapangwa, utaratibu ambao hutolewa hauhifadhiwa.

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

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

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

Aina tofauti, kama vile int na kuelea, huchukuliwa kuwa nakala ikiwa thamani zao ni sawa.

s = {100, 100.0}

print(s)
# {100}

Kwa kuwa brace tupu {} inachukuliwa kuwa aina ya kamusi, kitu cha aina ya seti tupu (seti tupu) kinaweza kuundwa kwa kutumia mjenzi aliyefafanuliwa ijayo.

s = {}

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

Imetolewa na mjenzi set()

Vitu vya seti ya aina pia vinaweza kuundwa na seti ya wajenzi ().

Kubainisha kitu kinachoweza kutekelezeka kama vile orodha au nakala kama hoja huzalisha kitu fulani ambacho vipengele vyake ni thamani za kipekee pekee, na nakala rudufu hazijajumuishwa.

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

Aina zisizobadilika za vigandishi huundwa na kijenzi kigandishi ().

fs_l = frozenset(l)

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

Ikiwa hoja itaachwa, kitu tupu cha aina ya kuweka (seti tupu) huundwa.

s = set()

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

Vipengele vinavyorudiwa vinaweza kuondolewa kwenye orodha au tuple kwa kutumia set(), lakini mpangilio wa orodha asili haujahifadhiwa.

Ili kubadilisha aina ya seti kuwa orodha au nakala, tumia list(),tuple().

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

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

Tazama makala ifuatayo kwa maelezo kuhusu kuondoa vipengele vinavyorudiwa huku ukihifadhi mpangilio, kutoa vipengele vinavyorudiwa pekee, na kuchakata vipengee vinavyorudiwa katika safu ya pande mbili (orodha ya orodha).

weka nukuu ya kujumuisha

Pamoja na ufahamu wa orodha, kuna ufahamu uliowekwa. Badilisha kwa urahisi mabano ya mraba [] na viunga {} katika ufahamu wa orodha.

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

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

Tazama nakala ifuatayo kwa habari zaidi juu ya nukuu ya ufahamu wa orodha.

Idadi ya vipengele katika seti:len()

Idadi ya vipengele katika seti inaweza kupatikana kwa len ya kazi iliyojengwa ndani ().

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

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

Ikiwa ungependa kuhesabu idadi ya vipengele katika kila orodha ambayo ina vipengele vilivyo na thamani mbili, nk., angalia makala ifuatayo.

Kuongeza Kipengele kwenye Seti:add()

Ili kuongeza kipengee kwenye seti, tumia njia ya add().

s = {0, 1, 2}

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

Ondoa kipengele kutoka kwa seti:discard(),remove(),pop(),clear()

Ili kuondoa kipengee kwenye seti, tumia njia za kutupa(), kuondoa(), pop(), na clear() mbinu.

Njia ya discard() hufuta kipengele kilichobainishwa kwenye hoja. Ikiwa thamani ambayo haipo katika seti imebainishwa, hakuna kinachofanyika.

s = {0, 1, 2}

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

s = {0, 1, 2}

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

Njia ya remove() pia huondoa kipengele kilichobainishwa kwenye hoja, lakini KeyError inarejeshwa ikiwa thamani ambayo haipo kwenye seti imebainishwa.

s = {0, 1, 2}

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

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

Njia ya pop() huondoa vitu kutoka kwa seti na kurudisha maadili yao. Haiwezekani kuchagua maadili ya kuondoa. Seti tupu itasababisha kosa la KeyError.

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() njia huondoa vitu vyote na kufanya seti tupu.

s = {0, 1, 2}

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

Wasset (muungano, muungano):| mwendeshaji,union()

Seti ya muungano (muungano, muungano) inaweza kupatikana kwa | operator au union() mbinu.

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}

Hoja nyingi zinaweza kubainishwa kwa mbinu. Mbali na aina ya seti, orodha na nakala ambazo zinaweza kubadilishwa kuwa aina iliyowekwa kwa set() pia zinaweza kubainishwa kama hoja. Vile vile hutumika kwa waendeshaji na mbinu zinazofuata.

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}

Seti za bidhaa (sehemu za kawaida, makutano, makutano):& mwendeshaji,intersection()

Seti ya bidhaa (sehemu ya kawaida, makutano, na makutano) inaweza kupatikana kwa & opereta au njia ya makutano ().

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}

jamaa inayosaidia:-endeshaji,difference()

Seti ya tofauti inaweza kupatikana kwa – operator au tofauti () njia.

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}

seti ya tofauti ya ulinganifu:^ mwendeshaji,symmetric_difference()

Seti ya tofauti ya ulinganifu (seti ya vipengele vilivyo katika moja tu kati ya hizo mbili) inaweza kupatikana kwa ^ opereta au symmetric_difference().

Sawa na mtengano wa kipekee (XOR) katika utendakazi wa kimantiki.

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

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

sehemu ndogo au la:<= mwendeshaji,issubset()

Kuamua kama seti ni seti ndogo ya seti nyingine, tumia <= opereta au mbinu ya issubset().

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

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

Njia zote mbili za <= opereta na issubset() zinarudi kuwa kweli kwa seti sawa.

Ili kubaini ikiwa ni kitengo kidogo cha kweli, tumia <= opereta, ambayo inarejesha sivyo kwa seti zinazolingana.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

Seti ya juu au la:>= mwendeshaji,issuperset()

Ili kubaini ikiwa seti moja ni seti kuu ya nyingine, tumia >= opereta au issuperset().

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

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

Njia zote mbili za >= opereta na issuperset() zinarudi kuwa kweli kwa seti sawa.

Ili kubaini kama ni superset ya kweli, tumia >= opereta, ambayo inarejesha sivyo kwa seti zinazolingana.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

Uamuzi wa kama wao ni wakuu au la:isdisjoint()

Kuamua ikiwa seti mbili ni muhimu kwa kila mmoja, tumia njia ya isdisjoint().

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

print(s1.isdisjoint(s2))
# False

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