2016-06-03 2 views
3

Ich habe die Liste wie folgen aus:Identifizieren Sie das Nicht-Null-Element in einer Liste, der gegebenen Anzahl in Python Nähe

lst = [1, 5, 0, 0, 4, 0] 

EDIT: würde Ich mag die Lage der ersten Zahl in der Liste finden, das ist nicht gleich Null und es ist am nächsten angegebene Nummer.

a = 3 # (given number) 

Es sollte 4 als Index und Wert auch zurückgeben. Ich habe versucht, mit diesem:

aber seine zeigt das 0 zu Element.

was ist der bessere Weg dafür?

+0

Bitte definieren "close"! –

+0

@KlausD. Ich denke, er meint "am nächsten" – samgak

+0

Nun, es wird definiert werden müssen, um die Frage zu verstehen und vor allem in Code. –

Antwort

5

Wenn ich Sie richtig verstanden, sondern nur die Nullen herauszufiltern nach aufzählt:

In [1]: lst = [1, 5, 0, 0, 4, 0] 

In [2]: a = 3 

In [3]: min(filter(lambda x: x[1] != 0, enumerate(lst)), 
      key=lambda x: abs(x[1] - a)) 
Out[3]: (4, 4) 

Ihr eigenes Beispiel (4, 4) auch für die angegebenen Werte zurückgibt though. Mit a = 0 gibt es einen Unterschied.

2

Ihre Antwort ist ziemlich nah. Sie müssen nur Null durch Unendlichkeit ersetzen.

min(enumerate(lst), key=lambda x: abs(a - (x[1] if x[1] else float("inf")))) 

Edit: blätterte a und x[1]

Verwandte Themen