Ένας πλήρης οδηγός με παραδείγματα κώδικα

Σε αυτό το σεμινάριο, θα μάθετε τα βασικά των συνόλων Python και τις διάφορες μεθόδους συνόλων που μπορείτε να χρησιμοποιήσετε για να τροποποιήσετε σύνολα Python.

Τα σύνολα είναι μία από τις ενσωματωμένες δομές δεδομένων στην Python. Όταν χρειάζεται να εργαστείτε με μια μη επαναλαμβανόμενη συλλογή στοιχείων, θα χρησιμοποιήσετε το σύνολο ως τη δομή δεδομένων μετάβασης.

Στις επόμενες πολλές ενότητες, θα εξετάσουμε τα βασικά των συνόλων python και τις μεθόδους συνόλου που μπορείτε να χρησιμοποιήσετε για να εργαστείτε μαζί τους. Στη συνέχεια θα μάθουμε πώς να εκτελούμε κοινές λειτουργίες συνόλου στην Python.

Ας ξεκινήσουμε!

Βασικά σύνολα Python

Στην Python, ένα σύνολο είναι μια μη ταξινομημένη συλλογή μη επαναλαμβανόμενων στοιχείων. Αυτό σημαίνει ότι τα στοιχεία σε ένα σύνολο πρέπει να είναι όλα ξεχωριστά.

Μπορείτε να προσθέσετε και να αφαιρέσετε στοιχεία από ένα σύνολο. Επομένως, το σύνολο είναι μια μεταβλητή συλλογή. Μπορεί να περιέχει στοιχεία διαφορετικών τύπων δεδομένων. Ωστόσο, τα επιμέρους στοιχεία σε ένα σύνολο θα πρέπει να είναι κατακερματίζεται.

Στην Python, ένα αντικείμενο λέγεται ότι μπορεί να κατακερματιστεί εάν η τιμή κατακερματισμού του δεν αλλάζει ποτέ. Τα περισσότερα αμετάβλητα αντικείμενα όπως οι συμβολοσειρές Python, οι πλειάδες και τα λεξικά μπορούν να κατακερματιστούν.

Θα μάθουμε για τη δημιουργία συνόλων λεπτομερώς. Προς το παρόν, σκεφτείτε τα ακόλουθα δύο σετ:

py_set = {0,1,2,(2,3,4),'Cool!'}
py_set = {0,1,2,[2,3,4],'Oops!'}

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-2d3716c7fe01> in <module>()
----> 1 py_set = {0,1,2,[2,3,4],'Oops!'}

TypeError: unhashable type: 'list'

Το πρώτο σύνολο περιέχει τρεις αριθμούς, μια πλειάδα και μια συμβολοσειρά. Η προετοιμασία του συνόλου εκτελείται χωρίς σφάλμα. Ενώ το δεύτερο σετ περιέχει μια λίστα αντί για μια πλειάδα. Μια λίστα είναι μια μεταλλαγμένη συλλογή, δεν μπορεί να κατακερματιστεί και η προετοιμασία δημιουργεί ένα TypeError.

📑 Συνδυάζοντας τα όλα μαζί, μπορούμε να ορίσουμε ένα σύνολο Python ως μια μεταβλητή συλλογή από διακριτά και κατακερματιζόμενα στοιχεία.

Πώς να δημιουργήσετε ένα σύνολο Python

Θα ξεκινήσουμε μαθαίνοντας πώς να δημιουργήσουμε ένα σύνολο στην Python.

#1. Χρήση ρητής εκκίνησης

Μπορείτε να δημιουργήσετε ένα σύνολο στην Python καθορίζοντας τα στοιχεία του συνόλου, διαχωρισμένα με κόμμα (,) και εγκλεισμένα σε ένα ζευγάρι σγουρά άγκιστρα {}.

py_set1 = {'Python','C','C++','JavaScript'}
type(py_set1)

# Output
set

Εάν έχετε εργαστεί με λίστες Python στο παρελθόν, το γνωρίζετε [] αρχικοποιεί μια κενή λίστα. Παρόλο που ένα σύνολο Python περικλείεται σε ένα ζεύγος σγουρά άγκιστρα {}, δεν μπορείτε να χρησιμοποιήσετε ένα ζεύγος {} για να αρχικοποιήσετε ένα σύνολο. Αυτό συμβαίνει επειδή το {} προετοιμάζει ένα λεξικό Python και όχι ένα σύνολο Python.

py_set2 = {}
type(py_set2)

# Output
dict

Μπορείτε να καλέσετε ξανά τη συνάρτηση type() για να επαληθεύσετε ότι το py_set είναι λεξικό (dict).

#2. Χρησιμοποιώντας τη συνάρτηση set().

Εάν θέλετε να αρχικοποιήσετε ένα κενό σύνολο και στη συνέχεια να προσθέσετε στοιχεία σε αυτό, μπορείτε να το κάνετε χρησιμοποιώντας τη συνάρτηση set().

py_set3 = set()
type(py_set3)

# Output
set

#3. Χύτευση άλλων επαναλήψεων σε ένα σύνολο

Ένας άλλος τρόπος για να δημιουργήσετε σύνολα είναι να μεταφέρετε άλλους επαναληπτικούς, όπως λίστες και πλειάδες, σε σύνολα, χρησιμοποιώντας το set(iterable).

py_list = ['Python','C','C++','JavaScript','C']
py_set4 = set(py_list)
print(py_set4)
# {'C++', 'C', 'JavaScript', 'Python'} # repeating element 'C' removed
type(py_set4)
# set

Στο παραπάνω παράδειγμα, η py_list περιέχει το ‘C’ δύο φορές. Αλλά στο py_set4, το ‘C’ εμφανίζεται μόνο μία φορά, καθώς το σύνολο είναι μια συλλογή από διακριτά στοιχεία. Αυτή η τεχνική χύτευσης στο σετ χρησιμοποιείται συχνά για την αφαίρεση διπλότυπων από λίστες Python.

  Πώς να επαναφέρετε την εφαρμογή στην αρχική οθόνη στο iPhone

Πώς να προσθέσετε στοιχεία σε ένα σύνολο Python

Ας ξεκινήσουμε δημιουργώντας ένα κενό σύνολο py_set και εργαζόμαστε με αυτό για το υπόλοιπο αυτού του σεμιναρίου.

py_set = set()
len(py_set) # returns the length of a set
# Output
0

#1. Χρησιμοποιώντας τη μέθοδο .add().

Για να προσθέσετε στοιχεία σε ένα σύνολο, μπορείτε να χρησιμοποιήσετε τη μέθοδο .add(). Το set.add(element) προσθέτει στοιχείο στο σύνολο.

Για λόγους σαφήνειας, θα προσθέσουμε στοιχεία στο σύνολο της Python και θα εκτυπώσουμε το σύνολο σε κάθε βήμα.

▶️ Ας προσθέσουμε τη συμβολοσειρά “Python” ως στοιχείο στο py_set.

py_set.add('Python')
print(py_set)

# Output
{'Python'}

Στη συνέχεια, θα προσθέσουμε ένα άλλο στοιχείο.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Είναι σημαντικό να κατανοήσετε ότι η μέθοδος .add() προσθέτει ένα στοιχείο στο σύνολο μόνο εάν δεν υπάρχει ήδη. Εάν το σύνολο περιέχει ήδη το στοιχείο που θέλετε να προσθέσετε, η λειτουργία προσθήκης δεν έχει αποτέλεσμα.

Για να το επαληθεύσουμε, ας δοκιμάσουμε να προσθέσουμε το ‘C++’ στο py_set.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Το σύνολο περιέχει ‘C++’, επομένως η λειτουργία προσθήκης δεν έχει αποτέλεσμα.

▶️ Ας προσθέσουμε μερικά ακόμη στοιχεία στο σετ.

py_set.add('C')
print(py_set)
py_set.add('JavaScript')
print(py_set)
py_set.add('Rust')
print(py_set)

# Output
{'Python', 'C++', 'C'}
{'JavaScript', 'Python', 'C++', 'C'}
{'Rust', 'JavaScript', 'Python', 'C++', 'C'}

#2. Χρησιμοποιώντας τη μέθοδο .update().

Μέχρι στιγμής, έχουμε δει πώς να προσθέτουμε στοιχεία στο υπάρχον σύνολο – ένα στοιχείο κάθε φορά.

Τι γίνεται αν θέλετε να προσθέσετε περισσότερα από ένα στοιχεία σε μια ακολουθία στοιχείων;

Μπορείτε να το κάνετε χρησιμοποιώντας τη μέθοδο .update() με τη σύνταξη: set.update(collection) για να προσθέσετε στοιχεία στη συλλογή σε ένα σύνολο. Η συλλογή μπορεί να είναι λίστα, πλειάδα, λεξικό και ούτω καθεξής.

py_set.update(['Julia','Ruby','Scala','Java'])
print(py_set)

# Output
{'C', 'C++', 'Java', 'JavaScript', 'Julia', 'Python', 'Ruby', 'Rust', 'Scala'}

Αυτή η μέθοδος είναι χρήσιμη όταν θέλετε να προσθέσετε μια συλλογή στοιχείων σε ένα σύνολο χωρίς να δημιουργήσετε άλλο αντικείμενο στη μνήμη.

Στην επόμενη ενότητα, ας μάθουμε πώς να αφαιρέσετε στοιχεία από ένα σύνολο.

Πώς να αφαιρέσετε στοιχεία από ένα σύνολο Python

Ας εξετάσουμε το ακόλουθο σύνολο (py_set πριν από τη λειτουργία ενημέρωσης).

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

#1. Χρησιμοποιώντας τη μέθοδο .pop().

Η set.pop() αφαιρεί ένα στοιχείο τυχαία από το σύνολο και το επιστρέφει. Ας καλέσουμε τη μέθοδο pop στο py_set και ας δούμε τι επιστρέφει.

py_set.pop()

# Output
'Rust'

Αυτή τη φορά, η κλήση στη μέθοδο .pop() επέστρεψε τη συμβολοσειρά “Rust”.

Σημείωση: Επειδή η μέθοδος .pop() επιστρέφει ένα στοιχείο τυχαία, όταν εκτελείτε τον κώδικα στο τέλος σας, μπορεί επίσης να λάβετε ένα άλλο στοιχείο.

Όταν εξετάζουμε το σετ, το ‘Rust’ δεν υπάρχει πλέον στο σετ.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++', 'C'}

#2. Χρησιμοποιώντας τις μεθόδους .remove() και discard().

Στην πράξη, μπορεί να θέλετε να αφαιρέσετε συγκεκριμένα στοιχεία από το σύνολο. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τις μεθόδους .remove() και .discard().

set.remove(element) αφαιρεί στοιχεία από το σύνολο.

py_set.remove('C')
print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Εάν προσπαθήσουμε να αφαιρέσουμε ένα στοιχείο που δεν υπάρχει στο σύνολο, θα αντιμετωπίσουμε ένα KeyError.

py_set.remove('Scala')

# Output
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-58-a1abab3a8892> in <module>()
----> 1 py_set.remove('Scala')

KeyError: 'Scala'

Ας ρίξουμε μια ματιά στο py_set it ξανά. Τώρα έχουμε τρία στοιχεία.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Με τη σύνταξη set.discard(element), η μέθοδος .discard() αφαιρεί επίσης στοιχεία από το σύνολο.

py_set.discard('C++')
print(py_set)

# Output
{'JavaScript', 'Python'}

Ωστόσο, διαφέρει από τη μέθοδο .remove() στο ότι δεν δημιουργεί ένα KeyError όταν προσπαθούμε να αφαιρέσουμε ένα στοιχείο που δεν υπάρχει.

  Πώς να διαγράψετε άλμπουμ φωτογραφιών σε iPhone, iPad και Mac

Εάν προσπαθήσουμε να αφαιρέσουμε το ‘Scala’ (που δεν υπάρχει) από τη λίστα χρησιμοποιώντας τη μέθοδο .discard(), δεν βλέπουμε κανένα σφάλμα.

py_set.discard('Scala') #no error!
print(py_set)

# Output
{'JavaScript', 'Python'}

Πώς να αποκτήσετε πρόσβαση σε στοιχεία ενός συνόλου Python

Μέχρι στιγμής, μάθαμε πώς να προσθέτουμε και να αφαιρούμε στοιχεία από σύνολα Python. Ωστόσο, δεν έχουμε δει ακόμη πώς να αποκτήσουμε πρόσβαση σε μεμονωμένα στοιχεία σε ένα σύνολο.

Καθώς ένα σύνολο είναι μια μη ταξινομημένη συλλογή, δεν μπορεί να ευρετηριαστεί. Επομένως, εάν προσπαθήσετε να αποκτήσετε πρόσβαση στα στοιχεία ενός συνόλου χρησιμοποιώντας το ευρετήριο, θα αντιμετωπίσετε ένα σφάλμα, όπως φαίνεται.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

print(py_set[0])

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-0329274f4580> in <module>()
----> 1 print(py_set[0])

TypeError: 'set' object is not subscriptable

Πώς λοιπόν αποκτάτε πρόσβαση σε στοιχεία σε ένα σύνολο;

Υπάρχουν δύο συνήθεις τρόποι για να γίνει αυτό:

  • Περιηγηθείτε στο σύνολο και αποκτήστε πρόσβαση σε κάθε στοιχείο
  • Ελέγξτε εάν ένα συγκεκριμένο στοιχείο είναι μέλος του συνόλου

▶️ Περιηγηθείτε στο σύνολο και αποκτήστε πρόσβαση στα στοιχεία χρησιμοποιώντας έναν βρόχο for.

for elt in py_set:
  print(elt)

# Output
C++
JavaScript
Python
Rust
C

Στην πράξη, μπορεί να θέλετε να ελέγξετε εάν ένα δεδομένο στοιχείο υπάρχει στο σύνολο χρησιμοποιώντας τον τελεστή in.

Σημείωση: το στοιχείο στο σύνολο επιστρέφει True εάν υπάρχει στοιχείο στο σύνολο. αλλιώς επιστρέφει False.

Σε αυτό το παράδειγμα, το py_set περιέχει «C++» και δεν περιέχει «Julia» και ο τελεστής in επιστρέφει True και False, αντίστοιχα.

'C++' in py_set
# True
'Julia' in py_set
# False

Πώς να βρείτε το μήκος ενός σετ Python

Όπως είδαμε νωρίτερα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση len() για να λάβετε τον αριθμό των στοιχείων που υπάρχουν σε ένα σύνολο.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}
len(py_set)

# Output: 5

Πώς να καθαρίσετε ένα σύνολο Python

Για να διαγράψετε ένα σύνολο αφαιρώντας όλα τα στοιχεία, μπορείτε να χρησιμοποιήσετε τη μέθοδο .clear().

Ας καλέσουμε τη μέθοδο .clear() στο py_set.

py_set.clear()

Εάν προσπαθήσετε να το εκτυπώσετε, θα λάβετε set() – υποδεικνύοντας ότι το σύνολο είναι άδειο. Μπορείτε επίσης να καλέσετε τη συνάρτηση len() για να επαληθεύσετε ότι το μήκος του συνόλου είναι μηδέν.

print(py_set)
# set()
print(len(py_set))
# 0

Μέχρι στιγμής, μάθαμε πώς να εκτελούμε βασικές λειτουργίες CRUD σε σύνολα Python:

  • Δημιουργία: Χρησιμοποιώντας τη συνάρτηση set(), πληκτρολογήστε casting και αρχικοποίηση
  • Διαβάστε: Πρόσβαση σε στοιχεία του συνόλου χρησιμοποιώντας βρόχους και σε τελεστή για δοκιμή ιδιότητας μέλους
  • Ενημέρωση: Προσθήκη, αφαίρεση στοιχείων από σύνολα και ενημέρωση συνόλων
  • Διαγραφή: Διαγράψτε ένα σύνολο αφαιρώντας όλα τα στοιχεία από αυτό

Λειτουργίες κοινού συνόλου, επεξηγημένες με κώδικα Python

Τα σύνολα Python μας επιτρέπουν επίσης να εκτελέσουμε τις βασικές λειτουργίες συνόλου. Θα μάθουμε γι ‘αυτούς σε αυτήν την ενότητα.

#1. Ένωση συνόλων σε Python

Στη θεωρία συνόλων, η ένωση δύο συνόλων είναι το σύνολο όλων των στοιχείων σε τουλάχιστον ένα από τα δύο σύνολα. Εάν υπάρχουν δύο σύνολα, το Α και το Β, τότε η ένωση περιέχει στοιχεία που υπάρχουν μόνο στο Α, μόνο στο Β και τα στοιχεία που υπάρχουν τόσο στο Α όσο και στο Β.

Για να βρείτε την ένωση των συνόλων, μπορείτε να χρησιμοποιήσετε το | τελεστής ή η .union() η μέθοδος με τη σύνταξη: setA.union(setB).

setA = {1,3,5,7,9}
setB = {2,4,6,8,9}

print(setA | setB)
# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

setA.union(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

Η ένωση συνόλου είναι μια λειτουργία αντικατάστασης. οπότε το AUB είναι το ίδιο με το BU A. Ας το επαληθεύσουμε εναλλάσσοντας τις θέσεις των setA και setB στην κλήση της μεθόδου .union().

setB.union(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

#2. Τομή συνόλων στην Python

Μια άλλη λειτουργία κοινού συνόλου είναι αυτή η τομή δύο συνόλων, του Α και του Β. Η πράξη τομής συνόλου επιστρέφει ένα σύνολο που περιέχει όλα τα στοιχεία που υπάρχουν τόσο στο Α όσο και στο Β.

  Πώς να αλλάξετε το χρώμα του πλέγματος διαφάνειας του Photoshop

Για να υπολογίσετε τη διασταύρωση, μπορείτε να χρησιμοποιήσετε τον τελεστή & ή τη μέθοδο .intersection(), όπως εξηγείται στο παρακάτω απόσπασμα κώδικα.

print(setA & setB)

# Output
{9}

setA.intersection(setB)

# Output
{9}

Σε αυτό το παράδειγμα, το στοιχείο 9 υπάρχει τόσο στο setA όσο και στο setB. οπότε το σύνολο τομής περιέχει μόνο αυτό το στοιχείο.

Όπως η ένωση συνόλου, η τομή συνόλου είναι επίσης μια αντιμεταθετική πράξη.

setB.intersection(setA)

# Output
{9}

#3. Ορισμός διαφοράς στην Python

Δεδομένων οποιωνδήποτε δύο συνόλων, η ένωση και η τομή μας βοηθούν να βρούμε τα στοιχεία που υπάρχουν και στα δύο και τουλάχιστον σε ένα από τα σύνολα, αντίστοιχα. Από την άλλη πλευρά, η διαφορά συνόλου μας βοηθά να βρούμε τα στοιχεία που υπάρχουν στο ένα σύνολο αλλά όχι στο άλλο.

– το setA.difference(setB) δίνει το σύνολο των στοιχείων που υπάρχουν μόνο στο setA και όχι στο setB.

– το setB.difference(setA) δίνει το σύνολο των στοιχείων που υπάρχουν μόνο στο setB και όχι στο setA.

print(setA - setB)

print(setB - setA)

# Output
{1, 3, 5, 7}
{8, 2, 4, 6}

Σαφώς, το AB δεν είναι το ίδιο με το BA, επομένως η διαφορά συνόλου δεν είναι μια πράξη αντικατάστασης.

setA.difference(setB)
# {1, 3, 5, 7}

setB.difference(setA)
# {2, 4, 6, 8}

#4. Διαφορά συμμετρικού συνόλου στην Python

Ενώ η τομή συνόλου μας δίνει στοιχεία που υπάρχουν και στα δύο σύνολα, η συμμετρική διαφορά συνόλου επιστρέφει το σύνολο των στοιχείων που υπάρχουν ακριβώς σε ένα από τα σύνολα.

Εξετάστε το ακόλουθο παράδειγμα.

setA = {1,3,5,7,10,12}
setB = {2,4,6,8,10,12}

Για να υπολογίσετε το σύνολο συμμετρικών διαφορών, μπορείτε να χρησιμοποιήσετε τον τελεστή ^ ή τη μέθοδο .symmetric_difference().

print(setA ^ setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Τα στοιχεία 10 και 12 υπάρχουν τόσο στο setA όσο και στο setB. Άρα δεν υπάρχουν στο σύνολο συμμετρικών διαφορών.

setA.symmetric_difference(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Καθώς η λειτουργία συμμετρικής διαφοράς συνόλου συλλέγει όλα τα στοιχεία που εμφανίζονται ακριβώς σε ένα από τα δύο σύνολα, το προκύπτον σύνολο είναι το ίδιο ανεξάρτητα από τη σειρά με την οποία συλλέγονται τα στοιχεία. Επομένως, μια συμμετρική διαφορά συνόλου είναι μια αντιμεταθετική πράξη.

setB.symmetric_difference(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

#5. Υποσύνολα και Υπερσύνολα στην Python

Στη θεωρία συνόλων, τα υποσύνολα και τα υπερσύνολα βοηθούν στην κατανόηση της σχέσης μεταξύ δύο συνόλων.

Δεδομένων δύο συνόλων Α και Β, το σύνολο Β είναι ένα υποσύνολο του συνόλου Α εάν όλα τα στοιχεία του συνόλου Β υπάρχουν επίσης στο σύνολο Α. Και το σύνολο Α είναι το υπερσύνολο του συνόλου Β.

Εξετάστε το παράδειγμα δύο συνόλων: γλώσσες και γλώσσες_εκτεταμένα.

languages = {'Python', 'JavaScript','C','C++'}
languages_extended = {'Python', 'JavaScript','C','C++','Rust','Go','Scala'}

Στην Python, μπορείτε να χρησιμοποιήσετε τη μέθοδο .issubset() για να ελέγξετε εάν ένα δεδομένο σύνολο είναι υποσύνολο ενός άλλου συνόλου.

Το setA.issubset(setB) επιστρέφει True εάν το setA είναι υποσύνολο του setB. Διαφορετικά, επιστρέφει False.

Σε αυτό το παράδειγμα, οι γλώσσες είναι ένα υποσύνολο των languages_extended.

languages.issubset(languages_extended)
# Output
True

Ομοίως, μπορείτε να χρησιμοποιήσετε τη μέθοδο .issuperset() για να ελέγξετε εάν ένα δεδομένο σύνολο είναι υπερσύνολο ενός άλλου συνόλου.

Το setA.issuperset(setB) επιστρέφει True εάν το setA είναι υπερσύνολο του setB. Διαφορετικά, επιστρέφει False.

languages_extended.issuperset(languages)
# Output
True

Καθώς το languages_extended είναι ένα υπερσύνολο γλωσσών, το languages_extended.issuperset(languages) επιστρέφει True, όπως φαίνεται παραπάνω.

συμπέρασμα

Ελπίζω αυτό το σεμινάριο να σας βοήθησε να κατανοήσετε τη λειτουργία των συνόλων Python, τις μεθόδους συνόλου για λειτουργίες CRUD και τις κοινές λειτουργίες συνόλων. Ως επόμενο βήμα, μπορείτε να δοκιμάσετε να τα χρησιμοποιήσετε στα έργα σας στην Python.

Μπορείτε να δείτε άλλους σε βάθος οδηγούς Python. Καλή μάθηση!