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?
You are producing a filtered list by using a list comprehension.
i is still being bound to each and every element of that list, and the last element is still
'three', even if it was subsequently filtered out from the list being produced.
You should not use a list comprehension to pick out one element. Just use a
for loop, and
break to end it:
for elem in my_list: if elem == 'two': break
If you must have a one-liner (which would be counter to Python’s philosophy, where readability matters), use the
next() function and a generator expression:
i = next((elem for elem in my_list if elem == 'two'), None)
which will set
None if there is no such matching element.
The above is not that useful a filter; your are essentially testing if the value
'two' is in the list. You can use
in for that:
elem = 'two' if 'two' in my_list else None