Python dəstləri idarə edən daxili məlumat növü, dəsti təmin edir.
Növ dəsti təkrar olunmayan elementlərin (eyni dəyər olmayan elementlər, unikal elementlər) toplusudur və birləşmə dəsti, məhsul dəsti və fərq dəsti kimi dəst əməliyyatlarını yerinə yetirə bilir.
Bu bölmədə dəst tipli çoxluq əməliyyatlarında əsas əməliyyatlar nümunə kodu ilə izah edilir.
- Set obyektlərinin yaradılması:
{}
,set()
- daxil qeydini təyin edin
- Dəstdəki elementlərin sayı:
len()
- Dəstəyə elementin əlavə edilməsi:
add()
- Çoxluqdan elementi çıxarın:
discard()
,remove()
,pop()
,clear()
- Wasset (birləşmə, birləşmə):|operator,
union()
- Məhsul dəstləri (ümumi hissələr, kəsişmələr, kəsişmələr):& operator,
intersection()
- nisbi tamamlayıcı:-operator,
difference()
- simmetriya fərqi dəsti:^ operator,
symmetric_difference()
- alt çoxluq və ya yox:<= operator,
issubset()
- Üst dəst və ya yox:>= operator,
issuperset()
- Onların qarşılıqlı əsas olub-olmamasının müəyyən edilməsi:
isdisjoint()
Dəst növü elementləri əlavə edə və silə bilən dəyişkən tipdir, həmçinin dəst növü ilə eyni dəst əməliyyatına və digər üsullara malik olan, lakin dəyişməz olan (elementləri əlavə etməklə, silməklə və ya başqa şəkildə dəyişdirməklə dəyişdirilə bilməz) frozenset növü də var. ).
- Set obyektinin yaradılması::{},set()
- daxil qeydini təyin edin
- Dəstdəki elementlərin sayı:len()
- Dəstəyə elementin əlavə edilməsi:add()
- Çoxluqdan elementi çıxarın:discard(),remove(),pop(),clear()
- Wasset (birləşmə, birləşmə):|operator,union()
- Məhsul dəstləri (ümumi hissələr, kəsişmələr, kəsişmələr):& operator,intersection()
- nisbi tamamlayıcı:-operator,difference()
- simmetriya fərqi dəsti:^ operator,symmetric_difference()
- alt çoxluq və ya yox:<= operator,issubset()
- Üst dəst və ya yox:>= operator,issuperset()
- Onların qarşılıqlı əsas olub-olmamasının müəyyən edilməsi:isdisjoint()
Set obyektinin yaradılması::{},set()
Dalğa mötərizələri ilə yaradılıb {}
Çoxluq tipli obyektlər elementləri mötərizədə {} bağlamaq yolu ilə yaradıla bilər.
Dublikat dəyərlər varsa, onlar nəzərə alınmır və yalnız unikal dəyərlər elementlər kimi qalır.
s = {1, 2, 2, 3, 1, 4}
print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>
Elementlər kimi müxtəlif növlərin olması mümkündür. Bununla belə, siyahı növləri kimi yenilənə bilən obyektlər qeydə alına bilməz. Dəstələrə icazə verilir.
Həmçinin, dəst növləri sıralanmadığından, onların yaradılma sırası saxlanmır.
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 və float kimi müxtəlif növlər, onların dəyərləri ekvivalentdirsə, dublikat hesab olunur.
s = {100, 100.0}
print(s)
# {100}
Boş mötərizə {} lüğət növü hesab olunduğundan, sonra təsvir edilən konstruktordan istifadə etməklə boş çoxluq tipli obyekt (boş dəst) yaradıla bilər.
s = {}
print(s)
print(type(s))
# {}
# <class 'dict'>
Konstruktor seti() tərəfindən yaradılıb
Set tipli obyektlər set() konstruktoru ilə də yaradıla bilər.
Siyahı və ya dəst kimi təkrarlana bilən obyektin arqument kimi göstərilməsi elementləri yalnız unikal dəyərlər olan, dublikat elementləri istisna olmaqla, çoxluq obyekti yaradır.
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'>
Dəyişməz frozenset növləri frozenset() konstruktoru ilə yaradılır.
fs_l = frozenset(l)
print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>
Arqument buraxılıbsa, boş dəst tipli obyekt (boş dəst) yaradılır.
s = set()
print(s)
print(type(s))
# set()
# <class 'set'>
Dublikat elementlər set() istifadə edərək siyahıdan və ya dəstdən silinə bilər, lakin orijinal siyahının sırası qorunmur.
Çoxluq növünü siyahıya və ya tuple çevirmək üçün list(),tuple() istifadə edin.
l = [2, 2, 3, 1, 3, 4]
l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]
Sifarişi qoruyarkən dublikat elementləri silmək, yalnız dublikat elementləri çıxarmaq və ikiölçülü massivdə dublikat elementləri emal etmək (siyahıların siyahısı) haqqında məlumat üçün aşağıdakı məqaləyə baxın.
daxil qeydini təyin edin
Siyahı anlayışları kimi, müəyyən anlayışlar da var. Sadəcə olaraq siyahının başa düşülməsində kvadrat mötərizələri [] mötərizələri {} mötərizələri ilə əvəz edin.
s = {i**2 for i in range(5)}
print(s)
# {0, 1, 4, 9, 16}
Siyahının başa düşülməsi notasiyası haqqında ətraflı məlumat üçün aşağıdakı məqaləyə baxın.
Dəstdəki elementlərin sayı:len()
Çoxluqdakı elementlərin sayını daxili funksiya len() ilə əldə etmək olar.
s = {1, 2, 2, 3, 1, 4}
print(s)
print(len(s))
# {1, 2, 3, 4}
# 4
Əgər hər bir siyahıda təkrar dəyərlərə malik elementləri olan elementlərin sayını və s. saymaq istəyirsinizsə, aşağıdakı məqaləyə baxın.
Dəstəyə elementin əlavə edilməsi:add()
Çoxluğa element əlavə etmək üçün add() metodundan istifadə edin.
s = {0, 1, 2}
s.add(3)
print(s)
# {0, 1, 2, 3}
Çoxluqdan elementi çıxarın:discard(),remove(),pop(),clear()
Çoxluqdan elementi silmək üçün discard(), remove(), pop() və clear() metodlarından istifadə edin.
Discard() metodu arqumentdə göstərilən elementi silir. Əgər dəstdə mövcud olmayan dəyər göstərilibsə, heç nə edilmir.
s = {0, 1, 2}
s.discard(1)
print(s)
# {0, 2}
s = {0, 1, 2}
s.discard(10)
print(s)
# {0, 1, 2}
Remove() metodu arqumentdə göstərilən elementi də silir, lakin dəstdə mövcud olmayan dəyər göstərildikdə KeyError xətası qaytarılır.
s = {0, 1, 2}
s.remove(1)
print(s)
# {0, 2}
# s = {0, 1, 2}
# s.remove(10)
# KeyError: 10
Pop() metodu elementləri çoxluqdan çıxarır və onların dəyərlərini qaytarır. Hansı dəyərlərin silinəcəyini seçmək mümkün deyil. Boş dəst KeyError xətası ilə nəticələnəcək.
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() metodu bütün elementləri silir və dəsti boş edir.
s = {0, 1, 2}
s.clear()
print(s)
# set()
Wasset (birləşmə, birləşmə):|operator,union()
Birlik dəsti (birləşmə, birləşmə) | ilə əldə edilə bilər operator və ya union() metodu.
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}
Metod üçün bir neçə arqument təyin edilə bilər. Dəst növünə əlavə olaraq set() ilə dəst tipinə çevrilə bilən siyahılar və dəstlər də arqumentlər kimi göstərilə bilər. Eyni şey sonrakı operatorlara və üsullara da aiddir.
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}
Məhsul dəstləri (ümumi hissələr, kəsişmələr, kəsişmələr):& operator,intersection()
Məhsul dəsti (ümumi hissə, kəsişmə və kəsişmə) ilə əldə edilə bilər & operator və ya kəsişmə() metodu.
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}
nisbi tamamlayıcı:-operator,difference()
Fərq dəsti – operatoru və ya fərq () metodu ilə əldə edilə bilər.
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}
simmetriya fərqi dəsti:^ operator,symmetric_difference()
Simmetrik fərqlər dəsti (ikisindən yalnız birində olan elementlər dəsti) ^ operatoru və ya simmetrik_fərq () ilə əldə edilə bilər.
Məntiqi əməliyyatlarda eksklüziv disjunksiyaya (XOR) bərabərdir.
s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}
s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}
alt çoxluq və ya yox:<= operator,issubset()
Çoxluğun başqa çoxluğun alt çoxluğu olub-olmadığını müəyyən etmək üçün <= operatorundan və ya issubset() metodundan istifadə edin.
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s1 <= s2)
# True
print(s1.issubset(s2))
# True
Həm <= operatoru, həm də issubset() metodu ekvivalent dəstlər üçün doğru qaytarır.
Bunun həqiqi alt çoxluq olub-olmadığını müəyyən etmək üçün ekvivalent çoxluqlar üçün yalanı qaytaran <= operatorundan istifadə edin.
print(s1 <= s1)
# True
print(s1.issubset(s1))
# True
print(s1 < s1)
# False
Üst dəst və ya yox:>= operator,issuperset()
Bir çoxluğun digərinin super çoxluğu olub olmadığını müəyyən etmək üçün >= operatorundan və ya issuperset() istifadə edin.
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s2 >= s1)
# True
print(s2.issuperset(s1))
# True
Həm >= operatoru, həm də issuperset() metodu ekvivalent dəstlər üçün doğru qaytarır.
Bunun həqiqi superset olub-olmadığını müəyyən etmək üçün >= operatorundan istifadə edin ki, bu da ekvivalent dəstlər üçün false qaytarır.
print(s1 >= s1)
# True
print(s1.issuperset(s1))
# True
print(s1 > s1)
# False
Onların qarşılıqlı əsas olub-olmamasının müəyyən edilməsi:isdisjoint()
İki çoxluğun bir-birinə əsas olub olmadığını müəyyən etmək üçün isdisjoint() metodundan istifadə edin.
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}
print(s1.isdisjoint(s2))
# False
print(s1.isdisjoint(s3))
# True