"filtered view" upon lists?
Paul McGuire
ptmcg at austin.rr._bogus_.com
Tue Sep 12 10:12:13 EDT 2006
"Jorge Godoy" <jgodoy at gmail.com> wrote in message
news:878xkpb5wa.fsf at gmail.com...
> Wildemar Wildenburger <wildemar at freakmail.de> writes:
>
>> I don't know how else to call what I'm currently implementing: An object
>> that
>> behaves like a list but doesn't store it's own items but rather pulls
>> them
>> from a larger list (if they match a certain criterion).
>> Changes to the filter are instantly reflected in the underlying list.
>> Clear enough?
>
> It looks like you're implementing a callable to me. This is a method that
> returns results based on some input -- here your original list and filter.
>
> Then you'll use this method wherever you need that filtered list.
>
>> Ok, so I figured that this is generic enough to be found in some standard
>> module already (I've had this often enough: Painfully implementing s/th
>> and
>> then finding it in the libs some weeks later.).
>
> I don't believe it is generic. Nobody knows your data specs or filtering
> needs.
>
>> Any pointers?
>
> Use of list comprehension might make it easier to code this:
>
>
> def myCallable(my_list, filter):
> filtered_list = [(item) for item in my_list if filter(item)]
> return filtered_list
>
>
> Example of full code:
>
>>>> test_list = range(10)
>>>> filter = lambda x: not x%2
>>>> def myCallable(list, filter):
> ... filtered_list = [(item) for item in list if filter(item)]
> ... return filtered_list
> ...
>>>> myCallable(test_list, filter)
> [0, 2, 4, 6, 8]
>>>> for item in myCallable(test_list, filter):
> ... print "See? I'm", item
> ...
> See? I'm 0
> See? I'm 2
> See? I'm 4
> See? I'm 6
> See? I'm 8
>>>>
>
>
> --
> Jorge Godoy <jgodoy at gmail.com>
Functionally-speaking, there is the filter built-in that does this same
thing:
>>> data = range(10)
>>> odds = filter(lambda x : x % 2, data)
>>> evens = filter(lambda x : x % 2 != 1, data)
>>> odds
[1, 3, 5, 7, 9]
>>> evens
[0, 2, 4, 6, 8]
-- Paul
More information about the Python-list
mailing list