English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai tutto su Python set; come crearli, aggiungere o rimuovere elementi e tutte le operazioni eseguibili sugli insiemi in Python.
L'insieme è un insieme disordinato di elementi. Ogni elemento è unico (nessun elemento duplicato) e deve essere immutabile (non può essere modificato).
Tuttavia, l'insieme stesso è variabile. Possiamo aggiungere o rimuovere elementi.
Gli insiemi possono essere utilizzati per eseguire operazioni matematiche sugli insiemi, come l'intersezione, l'unione, la differenza simmetrica e così via.
Crea un insieme mettendo tutti gli elementi tra parentesi graffe {} e separandoli con virgole o utilizzando la funzione built-in set().
può avere un numero arbitrario di elementi e possono avere diversi tipi (interi, float, tuple, stringhe, ecc.). Tuttavia, l'insieme non può avere elementi mutabili (ad esempiolist, set odictionary) come suoi elementi.
# Set di interi my_set = {1, 2, 3} print(my_set) # Set di tipi di dati misti my_set = {1.0, "Hello", (1, 2, 3)} print(my_set)
Prova anche questi esempi.
# Senza elementi duplicati # Output: {1, 2, 3, 4} my_set = {1,2,3,4,3,2} print(my_set) # L'insieme non può contenere elementi mutabili # qui [3, 4] è una lista mutabile # Se descommenti la riga 12, # Questo causerebbe un errore. # TypeError: unhashable type: 'list' # my_set = {1, 2, [3, 4]} # Possiamo generare un insieme da una lista # Output: {1, 2, 3} my_set = set([1,2,3,2]) print(my_set)
Creare un insieme vuoto è un po' speciale.
Le parentesi vuote {} creano un dizionario vuoto in Python. Per creare un insieme vuoto senza elementi, utilizziamo la funzione set() senza parametri.
# Inizializza con {} a = {} # Controlla il tipo di dati di a # Output: <class 'dict'> print(type(a)) # Inizializza utilizzando set() a = set() # Controlla il tipo di dati di a # Output: <class 'set'> print(type(a))
L'insieme è variabile. Tuttavia, poiché sono unordered, l'indice non ha senso.
Non possiamo utilizzare l'indicizzazione o le fette per accedere o modificare gli elementi dell'insieme. L'insieme non lo supporta.
Possiamo utilizzare il metodo add() per aggiungere un singolo elemento, il metodo update() per aggiungere più elementi. Il metodo update() può accettaretupla,lista,stringao altri insiemi come parametri. In tutti i casi, evitare la duplicazione.
# Inizializza my_set my_set = {1,3} print(my_set) # Se si commenta la riga 9, # Otterrai un errore # TypeError: l'oggetto 'set' non supporta l'indicizzazione # my_set[0] # Aggiungere un elemento # Output: {1, 2, 3} my_set.add(2) print(my_set) # Aggiungere più elementi # Output: {1, 2, 3, 4} my_set.update([2,3,4]) print(my_set) # Aggiungere list e set # Output: {1, 2, 3, 4, 5, 6, 8} my_set.update([4,5], {1,6,8}) print(my_set)
Quando si esegue il programma, l'output è:
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
Possiamo utilizzare i metodi discard() e remove() per eliminare elementi specifici dall'insieme.
L'unica differenza tra i due è che, se si utilizza discard() e l'elemento non esiste nell'insieme, rimane invariato. Tuttavia, remove() lancia un errore in questo caso.
Esempi seguenti illustreranno questo punto.
# Inizializza my_set my_set = {1, 3, 4, 5, 6} print(my_set) # gettare un elemento # Output: {1, 3, 5, 6} my_set.discard(4) print(my_set) # rimuovere un elemento esistente # Output: {1, 3, 5} my_set.remove(6) print(my_set) # gettare un elemento # non è presente in my_set # Output: {1, 3, 5} my_set.discard(2) print(my_set) # rimuovere un elemento # non è presente in my_set # Se non si commenta #my_set.remove(2), # Lancia un errore. # Output: KeyError: 2 # my_set.remove(2)
Allo stesso modo, possiamo utilizzare il metodo pop() per eliminare e restituire un elemento.
L'insieme non è ordinato, non possiamo determinare quale elemento verrà rimosso. Questo è completamente casuale.
Possiamo anche utilizzare il metodo clear() per eliminare tutti gli elementi dell'insieme.
# Inizializza my_set # Output: insieme di elementi unici my_set = set("HelloWorld") print(my_set) # rimuovere un elemento # Output: elemento casuale print(my_set.pop()) # Popolare un elemento casuale # Output: elemento casuale my_set.pop() print(my_set) # Svuota my_set # Output: set() my_set.clear() print(my_set)
Gli insiemi possono essere utilizzati per eseguire operazioni matematiche sugli insiemi, come unione, intersezione, differenza e differenza simmetrica. Possiamo realizzarle tramite operatori o metodi.
Consideriamo i seguenti due insiemi per le seguenti operazioni.
>>> A = {1, 2, 3, 4, 5} >>> B = {4, 5, 6, 7, 8}
L'unione tra A e B è l'insieme di tutti gli elementi provenienti da entrambi gli insiemi.
L'unione è eseguita utilizzando l'operatore |. Può anche essere completata utilizzando il metodo union().
# Inizializza A e B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # Utilizzo dell'operatore | # Output: {1, 2, 3, 4, 5, 6, 7, 8} print(A | B)
Provare gli esempi seguenti nel shell Python.
# Utilizzo della funzione unione >>> A.union(B) {1, 2, 3, 4, 5, 6, 7, 8} # Utilizzo della funzione unione su B >>> B.union(A) {1, 2, 3, 4, 5, 6, 7, 8}
L'insieme di AeL'insieme di BL'intersezione è un insieme di elementi presenti sia in entrambi gli insiemi.
L'intersezione viene eseguita utilizzando l'operatore &. L'operazione può essere completata utilizzando il metodo intersection().
# Inizializza A e B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # Utilizzo dell'operatore & # Output: {4, 5} print(A & B)
Provare gli esempi seguenti nel shell Python.
# Utilizzo della funzione intersezione su A >>> A.intersection(B) {4, 5} # Utilizzo della funzione intersezione su B >>> B.intersection(A) {4, 5}
La differenza tra A e B (A-B) è un insieme di elementi presente solo in A e non in B. Allo stesso modo, B-A è un insieme di elementi presente in B e non in A.
La differenza è eseguita utilizzando l'operatore -. L'operazione può essere completata utilizzando il metodo difference().
# Inizializza A e B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # Utilizzo dell'operatore - su A # Output: {1, 2, 3} print(A - B)
Provare gli esempi seguenti nel shell Python.
# Utilizzo della funzione differenza su A >>> A.difference(B) {1, 2, 3} # Utilizzo dell'operatore - su B >>> B - A {8, 6, 7} # Utilizzo della funzione differenza su B >>> B.difference(A) {8, 6, 7}
La differenza simmetrica tra A e B è un insieme di elementi presente sia in A che in B, ma non gli stessi elementi.
La differenza simmetrica viene eseguita utilizzando l'operatore ^. L'operazione può essere completata utilizzando il metodo symmetric_difference().
# Inizializza A e B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # Utilizzare l'operatore ^ # Output: {1, 2, 3, 6, 7, 8} print(A ^ B)
Provare gli esempi seguenti nel shell Python.
# Utilizzare la funzione symmetric_difference su A >>> A.symmetric_difference(B) {1, 2, 3, 6, 7, 8} # Utilizzare la funzione symmetric_difference su B >>> B.symmetric_difference(A) {1, 2, 3, 6, 7, 8}
Ci sono molti metodi di raccolta, alcuni dei quali sono già stati utilizzati. Ecco l'elenco di tutti i metodi disponibili per l'oggetto set.
Metodo | Descrizione |
---|---|
add() | Aggiungere l'elemento alla raccolta |
clear() | Eliminare tutti gli elementi dalla raccolta |
copy() | Restituire una copia della raccolta |
difference() | Restituire la differenza di due o più raccolte come nuova raccolta |
difference_update() | Eliminare tutti gli elementi di un'altra raccolta da questa raccolta |
discard() | Eliminare l'elemento se è un membro. (Non eseguire nulla se l'elemento non è nella raccolta) |
intersection() | Restituire l'intersezione di due raccolte come nuova raccolta |
intersection_update() | Aggiornare la raccolta con l'intersezione di sé stesso e di un altro |
isdisjoint() | Restituire True se l'intersezione di due raccolte è vuota |
issubset() | Restituire True se un'altra raccolta contiene questa raccolta |
issuperset() | Restituire True se questa raccolta contiene un'altra raccolta |
pop() | Eliminare e restituire un elemento casuale della raccolta. Rilanciare KeyError se la raccolta è vuota |
remove() | Eliminare un elemento dalla raccolta. Se l'elemento non è un membro, viene sollevato un KeyError |
symmetric_difference() | Restituire la differenza simmetrica di due raccolte come nuova raccolta |
symmetric_difference_update() | Aggiornare una raccolta con la differenza simmetrica di sé stesso e di un altro |
union() | Restituire l'unione della raccolta nella nuova raccolta |
update() | Aggiornare la raccolta con l'unione di sé stesso e degli altri elementi |
Possiamo utilizzare la chiave di parola in per testare se un progetto esiste nella raccolta.
# Inizializza my_set my_set = set("apple") # Controlla se esiste "a" # Output: True print('a' in my_set) # Controlla se esiste "p" # Output: False print('p' not in my_set)
Utilizzando un ciclo for, possiamo esplorare ogni elemento della collection.
>>> for letter in set("apple"): ... print(letter) ... a p e l
Le funzioni built-in come all(), any(), enumerate(), len(), max(), min(), sort(), sum() sono spesso utilizzate insieme a set per eseguire diverse operazioni.
Funzione | Descrizione |
---|---|
all() | Se tutti gli elementi della集合 sono true (o la集合 è vuota), restituisce True. |
any() | Se qualsiasi elemento della集合 è true, restituisce True. Se la集合 è vuota, restituisce False. |
enumerate() | Restituisce un oggetto enumerate. Contiene tutte le coppie di indici e valori degli elementi. |
len() | Restituisce la lunghezza della集合 (numero di elementi). |
max() | Restituisce l'elemento più grande della集合. |
min() | Restituisce l'elemento più piccolo della集合. |
sorted() | Restituisce una nuova lista ordinata degli elementi della集合 (non ordina la集合 stessa). |
sum() | Restituisce la somma di tutti gli elementi della集合. |
Il Frozenset è una nuova classe con caratteristiche di集合, ma una volta assegnato, non può modificare i suoi elementi. Gli tuple sono liste immutabili, mentre i frozen set sono set immutabili.
Le collection mutabili non sono hashabili, quindi non possono essere utilizzate come chiavi di dizionario. D'altra parte, il frozenset è hashabile e può essere utilizzato come chiave di dizionario.
Puoi utilizzare la funzioneFrozenset()CreazioneFrozensets.
Questo tipo di dati supporta metodi come copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() e union(). Poiché immutabile, non ci sono metodi per aggiungere o eliminare elementi.
# Inizializza A e B A = frozenset([1, 2, 3, 4]) B = frozenset([3, 4, 5, 6])
Prova questi esempi nel shell di Python.
>>> A.isdisjoint(B) False >>> A.difference(B) frozenset({1, 2}) >>> A | B frozenset({1, 2, 3, 4, 5, 6}) >>> A.add(3) ... AttributeError: l'oggetto 'frozenset' non ha l'attributo 'add'