list problem...

Shashwat Anand anand.shashwat at gmail.com
Wed Sep 29 20:42:56 EDT 2010


On Thu, Sep 30, 2010 at 3:20 AM, Rog <rog at pynguins.com> wrote:

> On Wed, 29 Sep 2010 05:52:32 -0700, bruno.desthuilliers at gmail.com wrote:
>
> > On 29 sep, 14:17, Steven D'Aprano <st... at REMOVE-THIS- cybersource.com.au
> >
> > wrote:
> >> On Tue, 28 Sep 2010 20:11:51 +0100, Rog wrote:
> >> > On Tue, 28 Sep 2010 11:59:08 -0700, geremy condra wrote:
> >>
> >> >> On Tue, Sep 28, 2010 at 11:44 AM, Rog <r... at pynguins.com> wrote:
> >> >>> Hi all,
> >> >>> Have been grappling with a list problem for hours... a = [2, 3, 4,
> >> >>> 5,.....]
> >> >>> b = [4, 8, 2, 6,.....]
> >> >>> Basicly I am trying to place a[0], b[0] in a seperate list IF a[2]
> >> >>> and b[2] is present.
> >> >>> I have tried sets, zip etc with no success. I am tackling Euler
> >> >>> projects with Python 3.1, with minimal knowledge, and having to
> >> >>> tackle the language as I progress. Enjoyable frustration  :)
> >>
> >> >> I'm not clear on what your actual problem is, could you restate it?
> >>
> >> >> It sounds like you want to copy the ith element out of a and b into
> >> >> some other list- call it c- when the (i+2)th element meets some
> >> >> condition. What's the condition?
> >>
> >> >> Geremy Condra
> >>
> >> > The condition is that the i-th element is inverted, but not equal. eg
> >> > 4,2 - 2,4 , 34,5 - 5,34 etc.
> >> > Hope that is clearer.
> >>
> >> Clear as mud.
> >>
> >> Perhaps you should given an example. Given input
> >>
> >> a = [2, 3, 4, 5, 6, 7]
> >> b = [4, 8, 2, 6, 10, 42]
> >>
> >> what output are you expecting,
> >
> > AFAICT, the OP expects [2, 4] in this case, but it's not clear what he'd
> > expect for let's say:
> >
> > a = [2, 3, 21, 4, 5, 6, 7]
> > b = [4, 8, 22, 2, 6, 10, 42]
> >
> > (the 'reversed' pair is at i+3, not i+2)
> >
> > or
> >
> > a = [0, 2, 3, 4, 5, 6, 7]
> > b = [3, 4, 8, 2, 6, 10, 42]
> >
> > (the first pair is at pos 1, not 0)
> >
> > or
> >
> > a = [2, 3, 4, 8, 6, 7]
> > b = [4, 8, 2, 3, 10, 42]
> >
> > (there's a second 'non-reversed/reversed' match at positions resp. 1 & 3)
>
>
> It is true that I would have needed any 'non-reversed/reversed' pairs,
> these would have been the amicable pairs I was looking for.
> The method to recognise them eluded me. Eyes are not good enough  :)
> I have now joined Python-List and will follow the correct route.
> I have used a method suggested that has made the problem redundant,
> though it will bug me from now on.
>
> g = []
>
> def divsum(n):
>    return sum(i for i in range(1, n) if not n % i)
>

You can optimize divsum. Remember that factors exist in pairs except when
numbers are squares.
Like say 12 have factors = 1, 12, 2, 6, 3, 4
so you can run the loop till sqrt(n) for n since floor(sqrt(n)) = 3 where n
= 12
now factors are , (1, n/1), (2, n/2), (3, n/2).
for a square number say n = 9, the factors are (1, 3, 12)
If you run the loop till sqrt(n) for n since floor(sqrt(n)) = 3 where n = 9
we get the factors as (1, 9), (3, 3)
One of the factor will be redundant, so you need to take care of that.


>
> for x in range(10000, 2, -1):
>    c = divsum(x)
>    v = divsum(c)
>

Can be done as,
c, v = divsum(x), divsum(divsum(x))


>    if v == x and v != c:
>        g.append(divsum(x))
>

No need for else part, what is the use ?


>    else:
>        continue
>
> print(sum(g))
>

You could pack this up as,

>>> sum(i for i in range(10000, 0, -2) if divsum(divsum(i)) == i and
divsum(i) != i)
31626


> --
> Rog
> http://www.rog.pynguins.com
> --
> http://mail.python.org/mailman/listinfo/python-list
>



-- 
~l0nwlf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100930/73ba2b21/attachment-0001.html>


More information about the Python-list mailing list