Fastest way to max() list

Chris Rebert clp at rebertia.com
Fri Sep 26 14:08:29 EDT 2008


On Fri, Sep 26, 2008 at 7:22 AM, David Di Biase <dave.dibiase at gmail.com> wrote:
> Hi Chris,
>
> Yeah I hear you on point A. but this the specification I was given, so I
> have to follow it unfortunately. I've also been restricted and not allowed
> to use any other packages. I was using NumPy earlier (should have mentioned
> that) but I was wondering if there was a simpler way. Is NumPy technically
> even faster than just iterating and modifying the list directly?
>
> Also if I'm creating an array then making it,

Uh, this part of your sentence doesn't quite make sense...

> why not just do a temporary
> sort and capture the first and last values? Is this method you've provided
> supposed to be faster?

Well, unless you're going to use the rest of the sorted values at some
point in your program and since you have a large quantity of data,
yes, my way ought to be faster. Sorting the list is O(N*log(N)) while
running max and min over the list is only O(N).

Regards,
Chris

>
> Dave
>
> On Fri, Sep 26, 2008 at 12:42 AM, Chris Rebert <clp at rebertia.com> wrote:
>>
>> On Thu, Sep 25, 2008 at 8:57 PM, David Di Biase <dave.dibiase at gmail.com>
>> wrote:
>> > I have a list with about 1000-1500 sub-lists which look like so:
>> > list[-0.28817955213290786, 3.6693631467403929, 'H', 31.31225233035784]]
>> >
>> > The first and second values are Angstrom units specifying the location
>> > of a
>> > particle. What I'd like to do is determine the distance between the
>> > smallest
>> > and largest value in the arrays first position 0. I tried reading the
>> > manual
>> > for this but I don't see how it applies key or any of those other
>> > commands
>> > to the function. I could easily write a sort to do this and capture the
>> > first and last spots, but why do that when I can use max and min (if I
>> > can
>> > actually do that...).
>>
>> A. You should probably be using objects rather than arrays to
>> represent your datapoints, so that they're more structured and it's
>> more apparent what the values mean.
>>
>> B. Assuming by "distance" you meant "difference" and/or that the
>> distance is only in 1 dimension:
>>
>> from operator import itemgetter
>> firsts = map(itemgetter(0), main_list)
>> distance = max(firsts) - min(firsts)
>>
>> >
>> > So you wonderful Python gods, lay some knowledge on me. please? lol...
>> >
>> > while I'm at it, is there a way to modify an entire list without having
>> > to
>> > produce a whole new one? For example now say I want to modify list[0]
>> > and
>> > multiply it by some value. From what I understand previous version of
>> > Python
>> > allowed lists to be multiplied like matrices...now apparently it just
>> > replicates the list. :-/ shucks...
>>
>> You just have to apply the transform to each list element individually
>> (also, you might consider using NumPy [http://numpy.scipy.org/] if
>> you're doing a lot of matrix manipulation):
>>
>> for lst in main_list:
>>    lst[0] *= some_value
>>
>> Regards,
>> Chris
>>
>> >
>> > The first question would be useful to know, but the second question I do
>> > quite a bit of and the "best practice" would be really great to know!
>> >
>> > Thanks in advanced!
>> >
>> > --
>> > http://mail.python.org/mailman/listinfo/python-list
>> >
>> --
>> Follow the path of the Iguana...
>> http://rebertia.com
>
>



-- 
Follow the path of the Iguana...
http://rebertia.com



More information about the Python-list mailing list