Python нь багцуудыг зохицуулдаг өгөгдлийн төрөл буюу багцаар хангадаг.
Төрөл иж бүрдэл нь давхардаагүй элементүүдийн цуглуулга (ижил утгагүй элементүүд, өвөрмөц элементүүд) бөгөөд нэгдлийн олонлог, бүтээгдэхүүний олонлог, зөрүүний олонлог зэрэг олонлогийн үйлдлүүдийг гүйцэтгэх боломжтой.
Энэ хэсэгт багц төрлийн багц үйлдлийн үндсэн үйлдлүүдийг жишээ кодоор тайлбарласан болно.
- Тогтоосон объектуудыг бий болгох:
{}
,set()
- оруулах тэмдэглэгээг тохируулах
- Багц дахь элементүүдийн тоо:
len()
- Олонлогт элемент нэмэх:
add()
- Олонлогоос элемент устгах:
discard()
,remove()
,pop()
,clear()
- Wasset (нэгдэх, нэгдэх):|оператор,
union()
- Бүтээгдэхүүний багц (нийтлэг хэсэг, уулзвар, уулзвар):& оператор,
intersection()
- харьцангуй нэмэлт:– оператор,
difference()
- тэгш хэмийн зөрүүний багц:^ оператор,
symmetric_difference()
- дэд багц эсвэл үгүй:<= оператор,
issubset()
- Дээд багц эсвэл үгүй:>= оператор,
issuperset()
- Тэд бие биенээсээ анхдагч уу, үгүй юу гэдгийг тодорхойлох:
isdisjoint()
Багцын төрөл нь элемент нэмэх, устгах боломжтой хувирдаг төрөл бөгөөд мөн тохируулсан төрөлтэй ижил тохируулсан үйлдэл болон бусад аргуудтай боловч өөрчлөгддөггүй (элемент нэмэх, устгах эсвэл өөр аргаар өөрчлөх боломжгүй) frozenset төрөл байдаг. ).
- Тогтоосон объект үүсгэх::{},set()
- оруулах тэмдэглэгээг тохируулах
- Багц дахь элементүүдийн тоо:len()
- Олонлогт элемент нэмэх:add()
- Олонлогоос элемент устгах:discard(),remove(),pop(),clear()
- Wasset (нэгдэх, нэгдэх):|оператор,union()
- Бүтээгдэхүүний багц (нийтлэг хэсэг, уулзвар, уулзвар):& оператор,intersection()
- харьцангуй нэмэлт:– оператор,difference()
- тэгш хэмийн зөрүүний багц:^ оператор,symmetric_difference()
- дэд багц эсвэл үгүй:<= оператор,issubset()
- Дээд багц эсвэл үгүй:>= оператор,issuperset()
- Тэд бие биенээсээ анхдагч уу, үгүй юу гэдгийг тодорхойлох:isdisjoint()
Тогтоосон объект үүсгэх::{},set()
Долгион хаалтаар үүсгэгдсэн {}
Элементүүдийг хаалтанд {} хавсаргаснаар олонлог төрлийн объектуудыг үүсгэж болно.
Хэрэв давхардсан утгууд байгаа бол тэдгээрийг үл тоомсорлож, зөвхөн өвөрмөц утгууд элемент хэвээр үлдэнэ.
s = {1, 2, 2, 3, 1, 4}
print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>
Элемент болгон өөр өөр төрлүүдтэй байх боломжтой. Гэсэн хэдий ч жагсаалтын төрөл зэрэг шинэчлэгдэх боломжтой объектуудыг бүртгэх боломжгүй. Хавтангуудыг зөвшөөрдөг.
Мөн олонлогийн төрлүүд эрэмбэлэгдээгүй тул тэдгээрийг үүсгэсэн дарааллыг хадгалахгүй.
s = {1.23, 'abc', (0, 1, 2), 'abc'}
print(s)
# {(0, 1, 2), 1.23, 'abc'}
# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'
int болон float гэх мэт өөр төрлийн төрлүүд нь утга нь тэнцүү бол давхардсан гэж үзнэ.
s = {100, 100.0}
print(s)
# {100}
Хоосон хаалт {} нь толь бичгийн төрөлд тооцогддог тул дараа тайлбарласан байгуулагчийг ашиглан хоосон багц төрлийн объект (хоосон багц) үүсгэж болно.
s = {}
print(s)
print(type(s))
# {}
# <class 'dict'>
Бүтээгч олонлогоор үүсгэгдсэн()
Set төрлийн объектуудыг мөн set() үүсгэгчээр үүсгэж болно.
Жагсаалт эсвэл tuple гэх мэт давтагдах боломжтой объектыг аргумент болгон зааж өгснөөр элементүүд нь зөвхөн давтагдашгүй утгатай, давхардсан элементүүдийг хассан багц объектыг үүсгэдэг.
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'>
Frozenset() бүтээгчээр өөрчлөгддөггүй frozenset төрлүүд үүсдэг.
fs_l = frozenset(l)
print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>
Хэрэв аргументыг орхигдуулсан бол хоосон багц төрлийн объект (хоосон багц) үүснэ.
s = set()
print(s)
print(type(s))
# set()
# <class 'set'>
Давхардсан элементүүдийг set() ашиглан жагсаалтаас хасаж болох боловч анхны жагсаалтын дараалал хадгалагдахгүй.
Олонлогийн төрлийг жагсаалт эсвэл tuple болгон хөрвүүлэхийн тулд list(), tuple() ашиглана уу.
l = [2, 2, 3, 1, 3, 4]
l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]
Дараах нийтлэлээс дарааллыг хадгалахын зэрэгцээ давхардсан элементүүдийг арилгах, зөвхөн давхардсан элементүүдийг задлах, хоёр хэмжээст массив (жагсаалтын жагсаалт) дахь давхардсан элементүүдийг боловсруулах тухай мэдээллийг үзнэ үү.
оруулах тэмдэглэгээг тохируулах
Жагсаалттай ойлгохын зэрэгцээ багц ойлголтууд байдаг. Жагсаалтын ойлголтын дөрвөлжин хаалтыг [] хаалтаар {} солиход л болно.
s = {i**2 for i in range(5)}
print(s)
# {0, 1, 4, 9, 16}
Жагсаалтыг ойлгох тэмдэглэгээний талаарх дэлгэрэнгүй мэдээллийг дараах нийтлэлээс үзнэ үү.
Багц дахь элементүүдийн тоо:len()
Олонлог дахь элементийн тоог суулгасан len() функцээр олж авч болно.
s = {1, 2, 2, 3, 1, 4}
print(s)
print(len(s))
# {1, 2, 3, 4}
# 4
Жагсаалт бүр дэх давхардсан утгатай элементүүд гэх мэт элементийн тоог тоолохыг хүсвэл дараах нийтлэлийг үзнэ үү.
Олонлогт элемент нэмэх:add()
Олонлогт элемент нэмэхийн тулд add() аргыг ашиглана уу.
s = {0, 1, 2}
s.add(3)
print(s)
# {0, 1, 2, 3}
Олонлогоос элемент устгах:discard(),remove(),pop(),clear()
Олонлогоос элемент хасахын тулд discard(), remove(), pop(), clear() аргуудыг ашиглана.
Discard() арга нь аргументад заасан элементийг устгадаг. Хэрэв олонлогт байхгүй утгыг зааж өгсөн бол юу ч хийхгүй.
s = {0, 1, 2}
s.discard(1)
print(s)
# {0, 2}
s = {0, 1, 2}
s.discard(10)
print(s)
# {0, 1, 2}
Remove() арга нь аргументад заасан элементийг устгадаг боловч багцад байхгүй утгыг зааж өгсөн тохиолдолд KeyError алдаа гарна.
s = {0, 1, 2}
s.remove(1)
print(s)
# {0, 2}
# s = {0, 1, 2}
# s.remove(10)
# KeyError: 10
pop() арга нь олонлогоос элементүүдийг устгаж утгыг нь буцаана. Аль утгыг арилгахыг сонгох боломжгүй. Хоосон багц нь 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() арга нь бүх элементүүдийг устгаж, багцыг хоосон болгоно.
s = {0, 1, 2}
s.clear()
print(s)
# set()
Wasset (нэгдэх, нэгдэх):|оператор,union()
Холбооны багцыг (нэгдэх, нэгдэх) |-ээр авч болно оператор эсвэл union() арга.
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}
Аргын хувьд олон аргументыг зааж өгч болно. Олонлогийн төрлөөс гадна set()-ээр олонлогийн төрөл рүү хөрвүүлж болох жагсаалт, залгууруудыг аргумент болгон зааж өгч болно. Дараагийн операторууд болон аргуудад мөн адил хамаарна.
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}
Бүтээгдэхүүний багц (нийтлэг хэсэг, уулзвар, уулзвар):& оператор,intersection()
Бүтээгдэхүүний багц (нийтлэг хэсэг, уулзвар, уулзвар) & AMP; оператор эсвэл уулзвар() арга.
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}
харьцангуй нэмэлт:– оператор,difference()
Ялгаатай багцыг – оператор эсвэл ялгаа() аргаар авч болно.
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}
тэгш хэмийн зөрүүний багц:^ оператор,symmetric_difference()
Тэгш хэмт ялгавартай олонлогийг (хоёрын зөвхөн аль нэгэнд агуулагдах элементүүдийн багц) ^ оператор эсвэл тэгш хэмийн_ялгаа() ашиглан авч болно.
Логик үйлдлүүд дэх онцгой салгах (XOR) -тай тэнцүү.
s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}
s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}
дэд багц эсвэл үгүй:<= оператор,issubset()
Олонлог өөр олонлогийн дэд олонлог мөн эсэхийг тодорхойлохын тулд <= оператор эсвэл issubset() аргыг ашиглана уу.
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s1 <= s2)
# True
print(s1.issubset(s2))
# True
<= оператор болон issubset() арга хоёулаа тэнцүү олонлогт үнэнийг буцаана.
Энэ нь үнэн дэд олонлог мөн эсэхийг тодорхойлохын тулд <= операторыг ашиглана, энэ нь эквивалент олонлогт худал буцаана.
print(s1 <= s1)
# True
print(s1.issubset(s1))
# True
print(s1 < s1)
# False
Дээд багц эсвэл үгүй:>= оператор,issuperset()
Нэг олонлог нөгөөгийнхөө супер олонлог мөн эсэхийг тодорхойлохын тулд >= оператор эсвэл issuperset()-ийг ашиглана уу.
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s2 >= s1)
# True
print(s2.issuperset(s1))
# True
>= оператор болон issuperset() арга хоёулаа тэнцүү олонлогт үнэнийг буцаана.
Энэ нь үнэн супер олонлог мөн эсэхийг тодорхойлохын тулд >= операторыг ашиглана, энэ нь эквивалент олонлогт худал буцаана.
print(s1 >= s1)
# True
print(s1.issuperset(s1))
# True
print(s1 > s1)
# False
Тэд бие биенээсээ анхдагч уу, үгүй юу гэдгийг тодорхойлох:isdisjoint()
Хоёр олонлог бие биендээ анхдагч эсэхийг тодорхойлохын тулд isdisjoint() аргыг ашиглана.
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}
print(s1.isdisjoint(s2))
# False
print(s1.isdisjoint(s3))
# True