Woody
Woody

Reputation: 5130

finding first item in a list whose first item in a tuple is matched

I have a list of several thousand unordered tuples that are of the format

(mainValue, (value, value, value, value))

Given a main value (which may or may not be present), is there a 'nice' way, other than iterating through every item looking and incrementing a value, where I can produce a list of indexes of tuples that match like this:

index = 0;
for destEntry in destList:
if destEntry[0] == sourceMatch:
    destMatches.append(index)
index = index + 1

So I can compare the sub values against another set, and remove the best match from the list if necessary. This works fine, but just seems like python would have a better way!

Edit: As per the question, when writing the original question, I realised that I could use a dictionary instead of the first value (in fact this list is within another dictionary), but after removing the question, I still wanted to know how to do it as a tuple.

Upvotes: 1

Views: 68

Answers (1)

Paulo Bu
Paulo Bu

Reputation: 29804

With list comprehension your for loop can be reduced to this expression:

destMatches = [i for i,destEntry in enumerate(destList) if destEntry[0] == sourceMatch]

You can also use filter()1 built in function to filter your data:

destMatches = filter(lambda destEntry:destEntry[0] == sourceMatch, destList)

1: In Python 3 filter is a class and returns a filter object.

Upvotes: 2

Related Questions