I’ve got a list of objects. I want to find one (first or whatever) object in this list that has an attribute (or method result – whatever) equal to value.
What’s the best way to find it?
Here’s a test case:
class Test:
def __init__(self, value):
self.value = value
import random
value = 5
test_list = [Test(random.randint(0,100)) for x in range(1000)]
# that I would do in Pascal, I don't believe it's anywhere near 'Pythonic'
for x in test_list:
if x.value == value:
print "i found it!"
break
I think using generators and reduce() won’t make any difference because it still would be iterating through the list.
ps.: Equation to value is just an example. Of course, we want to get an element that meets any condition.
This gets the first item from the list that matches the condition, and returns
Noneif no item matches. It’s my preferred single-expression form.However,
The naive loop-break version, is perfectly Pythonic — it’s concise, clear, and efficient. To make it match the behavior of the one-liner:
This will assign
Nonetoxif you don’tbreakout of the loop.