PYTHON ΕΝΟΤΗΤΑ 17 – Sets

 



ΕΙΣΑΓΩΓΗ

Στο σημερινό δωρεάν μάθημα Python θα μάθουμε θεωρητικά και πρακτικά τι είναι τα Sets, και τα Frozensets που είναι παράγωγά τους, ποια methods διαθέτουν για την διαχείριση των στοιχείων τους και ποιες είναι οι διαφορές τους από τα lists και τα dictionaries.

ΗΟW TO DEFINE A SET

 Τα Sets έχουν πολλά κοινά χαρακτηριστικά με τα Lists και τα Dictionaries. Ένα Set είναι μια συλλογή από δεδομένα όπως και ένα List. Όμως στα Sets, επειδή θεωρούνται unordered collection δηλαδή τα δεδομένα παρουσιάζονται με τυχαία σειρά, δεν υπάρχει index αριθμός αλλά χρησιμοποιείται η λογική του key όπως και στα Dictionaries.

Αν και παρουσιάζουν παρόμοια συμπεριφορά με αυτή των Lists και τα Dictionaries, τα Sets διαφοροποιούνται στο γεγονός ότι όλα τα στοιχεία μέσα στο Set είναι μοναδικά. Δηλαδή δεν μπορούμε να έχουμε στοιχεία με την ίδια ακριβώς τιμή μέσα στο ίδιο Set. Επίσης το κάθε στοιχείο μπορεί να έχει το δικό του data type.

Για να ορίσουμε ένα set χρησιμοποιούμε τη function set( ) και δηλώνουμε μέσα σε curly brackets ( { } ) τα δεδομένα μας.

app.py

my_set = set({'Arsenal', 'Aston Villa'})
print(type(my_set))
print(my_set)

Output

<class 'set'>
{'Aston Villa', 'Arsenal'}

Μπορούμε επίσης να παραλείψουμε τη function set( ) και να ορίσουμε ένα set χρησιμοποιώντας μόνο τα curly brackets( { } ).

app.py

my_set = {'Arsenal', 'Aston Villa'}
print(type(my_set))
print(my_set)

Output

<class 'set'>
{'Aston Villa', 'Arsenal'}

METHODS OF SETS

Ένας εύκολος τρόπος για να μπορείτε να βρείτε όλες τις διαθέσιμες μεθόδους που υποστηρίζει κάποιο αντικείμενο, στη προκειμένη περίπτωση είναι τα sets για εμάς, είναι να χρησιμοποιήσουμε τη function dir( ).

app.py

my_set = {'Arsenal', 'Aston Villa'}
print(dir(my_set))

Output

['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

Επίσης για κάθε μέθοδο μπορείτε να λάβετε την περιγραφή της χρησιμοποιώντας τη function help( ).

app.py

my_set = {'Arsenal', 'Aston Villa'}
help(my_set.add)

Output

Δωρεάν μαθήματα Python

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

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

app.py

premier_league = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}
print(premier_league)

premier_league.add('Liverpool')
premier_league.add('Liverpool')
print(premier_league)

premier_league.remove('Liverpool')
print(premier_league)

premier_league.clear()
print(premier_league)

Output

{'Arsenal', 'Burnley', 'Aston Villa', 'Everton'}
{'Everton', 'Liverpool', 'Burnley', 'Aston Villa', 'Arsenal'}
{'Everton', 'Burnley', 'Aston Villa', 'Arsenal'}
set()

Υπάρχει μια πολύ χρήσιμη διαφορά ανάμεσα στη remove( ) και στη discard( ) μέθοδο που είναι σημαντικό να γνωρίζετε. Αν προσπαθήσετε να διαγράψετε ένα στοιχείο μέσα από ένα set με τη χρήση του remove( ) και αυτό το στοιχείο δεν υπάρχει, η Python θα σας επιστρέψει λάθος. Αν όμως για την ίδια περίπτωση χρησιμοποιήσετε το discard( ) τότε η Python απλά θα αγνοήσει την εντολή χωρίς να σας επιστρέψει λάθος στο κώδικα σας.

app.py

premier_league = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}
premier_league.remove('Chelsea')

Output

Traceback (most recent call last):
  File "E:\Python\Resources\practice\app.py", line 376, in <module>
    premier_league.remove('Chelsea')
KeyError: 'Chelsea'

app.py

premier_league = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}
premier_league.discard('Chelsea')

Output

Δωρεάν μαθήματα Python

USING FOR, IN, NOT OPERATORS

Όπως και στα προηγούμενα data structures που έχουμε μελετήσει, έτσι και στα sets μπορούμε να εκτελέσουμε ένα for loop για να πάρουμε μια λίστα με όλα τα δεδομένα που περιέχει.

app.py

premier_league = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}

for team in premier_league:
    print(team)

Output

Burnley
Arsenal
Aston Villa
Everton

Με την ίδια λογική μπορούμε να χρησιμοποιήσουμε και τους in και not operators.

app.py

premier_league = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}

if "Arsenal" in premier_league:
    print("This team belongs to Premier League")
else:
    print("Try harder next year")

Output

This team belongs to Premier League


MORE METHODS OF SETS

Εκτός από το ότι μοιάζουν με Lists και Dictionaries αλλά διαφέρουν στο γεγονός ότι οι τιμές σε ένα Set πρέπει να είναι μοναδικές, υπάρχει κάποια άλλη διαφορά που τα κάνει να ξεχωρίζουν και κατά συνέπεια να προτιμηθούν σε κάποιες περιπτώσεις? Φυσικά και υπάρχει! Ένα Set αντιπροσωπεύει στη πραγματικότητα ένα αλγεβρικό σετ τιμών. Μπορούμε λοιπόν να βρούμε τα κοινά στοιχεία δύο Set με τη χρήση της intersection( ) μεθόδου ή να δημιουργήσουμε ένα καινούργιο set από δύο άλλα set καλώντας τη union( ) μέθοδο.

app.py

teama = {'Arsenal', 'Burnley', 'Everton', 'Aston Villa'}
teamb = {'Chelsea', 'Arsenal', 'Liverpool', 'Everton'}

all_teams = teama.union(teamb)
print(all_teams)

common_teams = teama.intersection(teamb)
print(common_teams)

Output

{'Chelsea', 'Liverpool', 'Everton', 'Aston Villa', 'Burnley', 'Arsenal'}
{'Everton', 'Arsenal'}

COMBINING SETS WITH LISTS

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

app.py

teams = ['Arsenal', 'Burnley', 'Everton', 'Aston Villa', 'Arsenal']

unique_teams = (list(set(teams)))
print(unique_teams)

Output

['Arsenal', 'Everton', 'Burnley', 'Aston Villa']

DECLARING A FROZENSET

Πριν κλείσουμε το σημερινό δωρεάν μάθημα Python, ας αναλύσουμε ακόμη μια έννοια που ίσως ακούσετε και ονομάζετε frozenset. Στην ουσία μιλάμε για ένα set που είναι immutable (δεν μπορεί να αλλάξει), unordered και unique. Τέτοια sets μπορούμε να χρησιμοποιήσουμε για παράδειγμα στο να ορίζουμε τραπεζικούς λογαριασμούς που ο αριθμός τους δεν αλλάζει.

Για να ορίσουμε ένα frozenset χρησιμοποιούμε την μέθοδο frozeset( ).

app.py

teams = frozenset({'Arsenal', 'Burnley', 'Everton', 'Aston Villa', 'Arsenal'})
print(teams)

Output

frozenset({'Arsenal', 'Everton', 'Aston Villa', 'Burnley'})

Μην ξεχάσετε να κάνετε ένα μικρό donation έτσι ώστε αυτό το site να μεγαλώσει ακόμα πιο πολύ και να αποκτήσει περισσότερες δυνατότητες online παράδοσης δωρεάν μαθημάτων.

full-width

Post a Comment

0 Comments