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?
Advertisement
Answer
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 i
to 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