list index question

fedor fedor at mailandnews.com
Wed Apr 30 17:11:15 EDT 2003


> > Can I wildcard? I don't know the values in the second column.  I want
> > to find the first entry what has a particular value in the first
> > column.

> The list.index() function won't help you, then: it just does a strict
> equality comparison. You'll have to write a simple loop:
>
>     index = -1
>     for item in sql_result_list:
>         index += 1
>         if item[0] == 100:
>             print "Found it"
>             break
>     if index >= len(sql_result_list):
>         print "Not found"
>
> I know you said you wanted to avoid looping, but this may not be
> possible. Why did you want to avoid looping, anyway?
>
> Another thing you may not have thought of is to loop through your
> results once and build a dict that you could use for lookup:
>
>     index_dict = {}
>     for item in sql_result_list:
>         key = item[0]
>         index_dict[key] = item
>
> Now you can use index_dict to do O(1) lookups based on the first item of
> each tuple. Note that as written, though, only *one* item with the same
> key will be kept. There are other ways around that, but I'm getting a
> bit far off your original question.
>

If you realy want to avoid you can use the less eficient:

>>> list1=[(100,1),(100,10),(101,1),(101,5)]
>>> zip(*list1) #transpose
[(100, 100, 101, 101), (1, 10, 1, 5)]
>>> list(zip(*list1)[0]).index(100) #select the first column and transform
it into a list (because a tuple doesn't have an index function)
0







More information about the Python-list mailing list