Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Controllare se tutti gli elementi di una lista sono uguali

F
FraDepe (360 points)
4 6 7
in Programmare in Python by (360 points)
reshown by
Ciao a tutti,

dovrei trovare un modo per controllare se tutte le liste all'interno di una lista sono uguali e nel caso lo siano, mettere un valore uguale alla lunghezza di queste liste. Cercando su internet ho trovato che si potrebbe usare una list comprehension con all però non mi funziona. Qualcuno sa come aiutarmi ? Premetto che la lista che controlla ha almeno una lista formata da liste uguali, solo che non se ne accorge.

Grazie in anticipo
2.2k views
closed

2 Answers

Best answer
twgever (17470 points)
8 29 105
by (17.5k points)
selected by
fai set(lista)
così ottieni un insieme con tutti gli elementi della lista, senza ripetizioni. Automaticamente, se lista ha tutti elementi uguali dentro, set(lista) ti restituirà un insieme con un solo elemento, quindi len(set(lista))==1
F
FraDepe (360 points)
4 6 7
by (360 points)
Non posso fare un' insieme con una lista (TypeError: unhashable type: 'list')
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Non ti dovrebbe restituire quell'errore, dovrebbe funzionare... Dall'errore pare che tu stia provando a mettere una lista come chiave di un dizionario.
F
FraDepe (360 points)
4 6 7
by (360 points)

L'elemento che metto nell'insieme è una lista con delle liste e mi riporta questo errore frown

Romitoskj (8920 points)
5 8 40
by (8.9k points)
Ah ok, allora ha senso. Dovresti far diventare le liste contenute all'interno delle tuple o frozenset allora, in modo da avere un set di tuple/frozenset che sono hashable.
F
FraDepe (360 points)
4 6 7
by (360 points)
Si, ci avevo pensato ma ho trovato altri metodi che sembrerebbero essere più efficienti. Grazie lo stesso ad entrambi
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Di nulla! Se avessi avuto una lista di hashable type come interi o float sarebbe stato il metodo più rapido credo.
B
Benedetta Sampaolo (160 points)
0 0 1
by (160 points)
Io ho fatto il tuo stesso ragionamento con le liste e ho trovato lo stesso identico problema, ma non so come uscirne. consigli?
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
potresti fare cosi:

lista.count(primo elemento di lista)==len(lista)
F
FraDepe (360 points)
4 6 7
by (360 points)
Ho provato anche questo metodo ma per alcuni test continua a non accorgersene. Preciso che sono sempre gli stessi che mi danno problemi
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
stai cercando il modulo, giusto?
F
FraDepe (360 points)
4 6 7
by (360 points)
Esattamente xD
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)

Leggi il commento di prof Sterbini per capire bene il concetto di modulo:

https://q2a.di.uniroma1.it/18158/?show=18180#a18180

F
FraDepe (360 points)
4 6 7
by (360 points)
Il concetto l'ho capito e il ragionamento che uso dovrebbe essere giusto, solo che il codice non se ne accorge per alcuni test D:
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
liste possono essere diverse tra di loro ma avere corrispondenza biunivoca