Can someone explain this to me.
So, I have a list s
with numbers from -1 to 1 and I want to extract position of certain numbers in a list.
Example:
s= [-1, 0.5, 0.2, -0.9]
z = enumerate(s)
y1 = []
for i,j in z:
if j<=-0.8 and j>=-1:
k = i
y1.append(k)
y2 = []
for i,j in z:
if j<=0.8 and j>=-0.8:
k = i
y2.append(k)
I get y1 = [0, 3]
and y2 = []
But if I define second enumerate
:
z1 = enumerate(s)
y1 = []
for i,j in z1:
if j<=-0.8 and j>=-1:
k = i
y1.append(k)
z2 = enumerate(s)
y2 = []
for i,j in z2:
if j<=0.8 and j>=-0.8:
k = i
y2.append(k)
I get result y1 = [0, 3]
and y2 = [1, 2]
Why do I need second enumerate
?
enumerate
returns an iterator to the sequence. Once traversed, it cannot be used again:
In [1]: l = [1, 2, 3, 4, 5]
In [2]: e = enumerate(l)
In [3]: e
Out[3]: <enumerate at 0x7fad7aea25e8>
In [4]: list(e)
Out[4]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
In [5]: list(e)
Out[5]: []
You could wrap it with a list:
In [6]: e = list(enumerate(l))
In [7]: e
Out[7]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
In [8]: list(e)
Out[8]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
In [9]: list(e)
Out[9]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
You could also use list comprehensions in order to simplify your solution:
y1 = [i for i, x in enumerate(s) if -1 <= x <= -0.8]
y2 = [i for i, x in enumerate(s) if -0.8 <= x <= 0.8]