2010-02-19 7 views
16

Czy istnieje jakaś inteligentna funkcja wbudowana lub coś, co zwróci 1 dla przykładu min() poniżej? (Założę się, że to solidny powód nie wrócić czegokolwiek, ale w moim przypadku muszę go lekceważyć None wartości naprawdę źle!)List minimum w Pythonie z Brak?

>>> max([None, 1,2]) 
2 
>>> min([None, 1,2]) 
>>> 

Odpowiedz

33

None jest zwrócony

>>> print min([None, 1,2]) 
None 
>>> None < 1 
True 

Jeśli aby powrócić 1 trzeba filtrować None dala:

>>> L = [None, 1, 2] 
>>> min(x for x in L if x is not None) 
1 
+1

Należy zauważyć, że 'None' zwracany jest Pythona 2. W Pythonie 3,' min ([brak, 1, 2]) 'umożliwia tworzenie 'TypeError: '<' nie jest obsługiwane między instancjami" int "i" NoneType ". –

3

używając wyrażenia generatora:

>>> min(value for value in [None,1,2] if value is not None) 
1 

końcu, można zastosować filtr:

>>> min(filter(lambda x: x is not None, [None,1,2])) 
1 
+1

Lepiej porównać tożsamość niż równość, gdy mamy do czynienia z 'None' – SilentGhost

+0

masz rację, poprawiono. –

+2

Składnia ma nic python 3. Działa w Pythonie 2 po prostu dobrze. Używanie 'jest' do porównywania z' Brak' jak w 'wartość nie jest żadną' jest preferowane przy użyciu' == '(lub'! = '). Linia z 'filtrem' jest ** niepoprawna **, spróbuj umieścić 0 na liście, a zobaczysz, że również zostanie przefiltrowana, co nie jest tym, czego potrzebujesz. – nosklo