On Thu, Sep 30, 2010 at 3:20 AM, Rog <r...@pynguins.com> wrote: > On Wed, 29 Sep 2010 05:52:32 -0700, bruno.desthuilli...@gmail.com wrote: > > > On 29 sep, 14:17, Steven D'Aprano <st...@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...@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
-- http://mail.python.org/mailman/listinfo/python-list