In primo luogo, vorrei bastone con itervalues
, che utilizza facile valutazione.
In secondo luogo, sarei cauto nel fare affidamento sull'utilizzo di set
poiché esegue la ricerca del valore nell'insieme a ogni iterazione del dizionario. È O(1)
in caso di eccedenza (e O(n)
nel caso peggiore che è O(1)
nel nostro caso se tutte le lunghezze sono uguali e O(n)
se la lunghezza è diversa) in base allo docs. Ma è difficile valutare il sovraccarico dell'utilizzo del set.
Vorrei utilizzare all
in questo caso. all
non riesce quando trova il primo valore False
. Quindi, la prima mancata corrispondenza della lunghezza interromperebbe il processo di interazione. Mentre, se si utilizza set
, passerebbe attraverso tutta la lista fino alla fine e solo allora confrontare la sua lunghezza a 1
.
>>> dct = {'a': [1, 2, 3],
'b': [1, 2, 3, 4],
'c': [1, 2]}
>>> lenght_1 = len(dct.itervalues().next())
>>> all(len(value)==lenght_1 for value in dct.itervalues())
False
>>> dct = {'a': [1, 2, 3],
'b': [1, 2, 4],
'c': [1, 2, 5]}
>>> lenght_1 = len(dct.itervalues().next())
>>> all(len(value)==lenght_1 for value in dct.itervalues())
True
Il codice può essere ottimizzato utilizzando lo stesso iteratore it
che non passerà attraverso il primo valore due volte:
>>> it = dct.itervalues()
>>> length_1 = len(next(it))
>>> all(len(value)==l1 for value in it)
True
Solo per chiarimenti: vuoi dire simile o uguale? – Andrej
@Andrej ovviamente * lo stesso * – scraplesh
Penso che tu intenda "valori" invece di "valori di vista". –