I have a issue with python.
I make a simple list:
>>> my_list = ["one","two","three"]
I want create a "single line code" for find a string.
for example, I have this code:
>>> [(i) for i in my_list if i=="two"]
['two']
But when I watch the variable is wrong (I find the last value of my list):
>>> print i
three
Why does my variable contain the last element and not the element that I want to find?
This question is related to
python
python-2.7
for-loop
if-statement
list-comprehension
In list comprehension the loop variable i becomes global. After the iteration in the for loop it is a reference to the last element in your list.
If you want all matches then assign the list to a variable:
filtered = [ i for i in my_list if i=='two']
If you want only the first match you could use a function generator
try:
m = next( i for i in my_list if i=='two' )
except StopIteration:
m = None
In python3 the variable i will be out of scope when you try to print it.
To get the value you want you should store the result of your operation inside a new variable:
my_list = ["one","two","three"]
result=[(i) for i in my_list if i=="two"]
print(result)
you will then the following output
['two']
When you perform
>>> [(i) for i in my_list if i=="two"]
i
is iterated through the list my_list
. As the list comprehension finishes evaluation, i
is assigned to the last item in iteration, which is "three"
.
Found this one:
[x for (i,x) in enumerate(my_list) if my_list[i] == "two"]
Will print:
["two"]
The reason it prints "three" is because you didnt define your array. The equivalent to what you're doing is:
arr = []
for i in array :
if i == "two" :
arr.push(i)
print(i)
You are asking for the last element it looked through, which is not what you should be doing. You need to be storing the array to a variable in order to get the element.
The english equivalent of what you are doing is:
You: "I need you to print all the elements in this array that equal two, but in an array. And each time you cycle through the list, define the current element as I."
Computer: "Here: ["two"]"
You: "Now tell me 'i'"
Computer: "'i' is equal to "three"
You: "Why?"
The reason 'i' is equal to "three" is because three was the last thing that was defined as I
the computer did:
i = "one"
i = "two"
i = "three"
print(["two"])
Because you asked it to.
If you want the index, go here If you want the values in an array, define the array, like this:
MyArray = [(i) for i in my_list if i=="two"]
Source: Stackoverflow.com