Domanda

C'è qualche intelligente funzione in-built o qualcosa che restituirà 1 per l'esempio min() qui sotto? (Scommetto che c'è una ragione solida per non tornare nulla, ma nel mio caso particolare ho bisogno di ignorare i valori None davvero male!)

>>> max([None, 1,2])
2
>>> min([None, 1,2])
>>> 
È stato utile?

Soluzione

None viene riconsegnato

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

Se si desidera tornare 1 bisogna filtrare la None via:

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

Altri suggerimenti

utilizzando un generatore di espressione:

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

alla fine, è possibile utilizzare il filtro:

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

Fai Nessuno infinito per min ():

def noneIsInfinite(value):
    if value is None:
        return float("inf")
    else:
        return value

>>> print min([1,2,None], key=noneIsInfinite)
1

Nota: questo approccio funziona per Python 3 pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top