Możesz mieć Python do zapętlenia kodu C za pomocą dictionary view; to robi test członkostwa przed wszystkimi wartościami bez tworzenia nowej listy:
if None not in d.viewvalues():
W Pythonie 3, dict.values()
zwraca widok słownika zbyt.
Demo Pythonie 2:
>>> d = {'a': None, 'c': None, 'b': '12345'}
>>> None not in d.viewvalues()
False
ta pętla na wartości aż zostanie znaleziona, jak liście lub członków odpowiedniego testu any()
, dzięki czemu jest to O (N) testu. Różni się to od słownika lub ustawieniem testu członkostwa, w którym można użyć skrótu, aby średnio wykonać test kosztowy.
Nie używałeś poprawnie any()
; drop wsporniki [...]
:
if any(v is not None for v in d.itervalues()): # Python 3: use d.values()
Jeśli twoim celem jest przetestowanie pewnych wartości, i trzeba unikać stałego pętle dla każdego testu, należy rozważyć utworzenie indeksu odwrotnego zamiast:
inverse_index = {}
for key, value in d.items():
inverse.setdefault(value, set()).add(key)
ten wymaga jednak, aby wartości były nieosiągalne. Teraz możesz po prostu przetestować każdą wartość:
if None not in inverse_index:
w O (1) czasie.
Nie można sprawdzić wartości na liście bez wykonywania iteracji .. – Maroun
Należy sprawdzić wszystkie wartości; co dokładnie jest nie tak z zapętleniem? –
Nie potrzebujesz zrozumienia listy. Po prostu 'any (d.values ())'. Ale ta pętla wewnętrznie. Nie ma sposobu na uniknięcie tego. – juanchopanza