440,235 Members | 1,008 Online
Need help? Post your question and get tips & solutions from a community of 440,235 IT Pros & Developers. It's quick & easy.

# Need help in understanding a python code

 P: n/a Hi, I am trying to understand the following line: # a is an integer array max([(sum(a[j:i]), (j,i)) Can you please tell me what that means, I think sum(a[j:i] means find the some from a[j] to a[i] But what is the meaning of the part (j,i)? Nov 16 '08 #1
15 Replies

 P: n/a On Sat, Nov 15, 2008 at 8:41 PM, si***************@gmail.com Can you please tell me what that means, I think sum(a[j:i] means find the some from a[j] to a[i] But what is the meaning of the part (j,i)? -- http://mail.python.org/mailman/listinfo/python-list Nov 16 '08 #2

 P: n/a On Nov 16, 3:41*pm, "silverburgh.me...@gmail.com"

 P: n/a This is the full source code: def A(w, v, i,j): if i == 0 or j == 0: return 0 if w[i-1] j: return A(w, v, i-1, j) if w[i-1] <= j: return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1, j - w[i-1])) I am reading this blog http://20bits.com/articles/introduct...c-programming/ On Sat, Nov 15, 2008 at 10:54 PM, Chris Rebert Hi,I am trying to understand the following line:# a is an integer arraymax([(sum(a[j:i]), (j,i)) This code isn't valid. You have a [ with no closing ]. Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com >>Can you please tell me what that means,I think sum(a[j:i] means find the some from a[j] to a[i]But what is the meaning of the part (j,i)?--http://mail.python.org/mailman/listinfo/python-list Nov 16 '08 #4

 P: n/a See below. On Nov 15, 11:15*pm, "Meryl Silverburgh" wrote: This is the full source code: def A(w, v, i,j): * * if i == 0 or j == 0: return 0 * * if w[i-1] j: *return A(w, v, i-1, j) * * if w[i-1] <= j: return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1,j - w[i-1])) I am reading this blog http://20bits.com/articles/introduct...c-programming/ On Sat, Nov 15, 2008 at 10:54 PM, Chris Rebert

 P: n/a silverburgh: max([(sum(a[j:i]), (j,i)) Other people have already answered you so I'll add only a small note: today the max() function has a key optional attribute, so that code can also be written as: max(((j, i) for ...), key=lambda (j, i): sum(a[j : i])) I think you have copied that part from code that runs in O(n^2); remember that you can find the max subarray with a well known O(n) algorithm too. Bye, bearophile Nov 16 '08 #6

 P: n/a On Nov 16, 4:15*pm, "Meryl Silverburgh" wrote: This is the full source code: def A(w, v, i,j): * * if i == 0 or j == 0: return 0 * * if w[i-1] j: *return A(w, v, i-1, j) * * if w[i-1] <= j: return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1,j - w[i-1])) Huh??? There is only a very slight resemblance to the code that you posted previously ... both contain 'max, 'i', and 'j' I am reading this blog http://20bits.com/articles/introduct...c-programming/ I suggest that you don't bother reading a blog written by somebody who (presumably consciously) keyed in that "if w[i-1] <= j: " above. Oh, very interesting, it contains: def msum(a): return max([(sum(a[j:i]), (j,i)) for i in range(1,len(a)+1) for j in range(i)]) Would you care to tell us which part of which function you are now trying to understand? Nov 16 '08 #7

 P: n/a On Sun, 16 Nov 2008 01:50:16 -0800, John Machin wrote: def A(w, v, i,j): Â* Â* if i == 0 or j == 0: return 0 Â* Â* if w[i-1] j: Â*return A(w, v, i-1, j) Â* Â* if w[i-1] <= j: return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1, j - w[i-1])) >I am reading this bloghttp://20bits.com/articles/introduct...c-programming/ I suggest that you don't bother reading a blog written by somebody who (presumably consciously) keyed in that "if w[i-1] <= j: " above. That is a translation of standard terminology for a hybrid function. Mathematics doesn't have an "else", so you write hybrid functions by enumerating each branch as an if. While it's not especially good Python technique, it's a perfectly idiomatic mathematical expression, and shouldn't be the basis for dismissing an entire blog. -- Steven Nov 16 '08 #8

 P: n/a On Nov 16, 9:31*pm, Steven D'Aprano http://20bits.com/articles/introduct...c-programming/ I suggest that you don't bother reading a blog written by somebody who (presumably consciously) keyed in that "if w[i-1] <= j: " above. That is a translation of standard terminology for a hybrid function. Mathematics doesn't have an "else", so you write hybrid functions by enumerating each branch as an if. An else is not required. if w[i-1] j: return A(w, v, i-1, j) return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1, j - w[i-1])) While it's not especially good Python technique, it's a perfectly idiomatic mathematical expression, and shouldn't be the basis for dismissing an entire blog. He's meant to be writing Python code, not mathematical expressions. Nov 16 '08 #9

 P: n/a On Sun, 16 Nov 2008 02:41:03 -0800, John Machin wrote: On Nov 16, 9:31Â*pm, Steven D'Aprano On Sun, 16 Nov 2008 01:50:16 -0800, John Machin wrote: def A(w, v, i,j): Â* Â* if i == 0 or j == 0: return 0 Â* Â* if w[i-1] j: Â*return A(w, v, i-1, j) if w[i-1] <= j: return Â* Â* max(A(w,v, i-1, j), v[i-1] + Â* Â* Â* A(w,v, i-1, j - w[i-1]))I am reading this blog >>http://20bits.com/articles/introduct...c-programming/ I suggest that you don't bother reading a blog written by somebody who (presumably consciously) keyed in that "if w[i-1] <= j: " above. That is a translation of standard terminology for a hybrid function.Mathematics doesn't have an "else", so you write hybrid functions byenumerating each branch as an if. An else is not required. if w[i-1] j: return A(w, v, i-1, j) return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1, j - w[i-1])) Which is also not valid terminology for hybrid functions. >While it's not especially good Python technique, it's a perfectlyidiomatic mathematical expression, and shouldn't be the basis fordismissing an entire blog. He's meant to be writing Python code, not mathematical expressions. And he's written Python code. Perfectly valid Python code. Just because it is not what you consider to be idiomatic Python code isn't a good reason to dismiss his entire blog. What you've done is rather like me saying that because you failed to use a colon after "required", and therefore haven't written what *I* consider good English style, not only is your specific post best avoided, but *all* your posts should be avoided. I trust you understand the logical fallacy I would be making, which you have already made. http://en.wikipedia.org/wiki/Style_o...stance_fallacy -- Steven and now begins the arguments as to whether it is a fallacy, and if so, if it is the fallacy I have said it is... Nov 16 '08 #10

 P: n/a On Nov 16, 11:04*pm, Steven D'Aprano http://20bits.com/articles/introduct...c-programming/ I suggest that you don't bother reading a blog written by somebody who (presumably consciously) keyed in that "if w[i-1] <= j: " above. That is a translation of standard terminology for a hybrid function. Mathematics doesn't have an "else", so you write hybrid functions by enumerating each branch as an if. An else is not required. * * if w[i-1] j: * * * *return A(w, v, i-1, j) * * return max(A(w,v, i-1, j), v[i-1] + A(w,v, i-1, j - w[i-1])) Which is also not valid terminology for hybrid functions. I couldn't care less. It's valid and efficient (compared to the original) Python. While it's not especially good Python technique, it's a perfectly idiomatic mathematical expression, and shouldn't be the basis for dismissing an entire blog. He's meant to be writing Python code, not mathematical expressions. And he's written Python code. Perfectly valid Python code. Just because it is not what you consider to be idiomatic Python code isn't a good reason to dismiss his entire blog. What you've done is rather like me saying that because you failed to use a colon after "required", and therefore haven't written what *I* consider good English style, not only is your specific post best avoided, but *all* your posts should be avoided. I trust you understand the logical fallacy I would be making, which you have already made. Nothing to do with style. It was the screaming inefficiency of: if non_trivial_condition: return x if not non_trivial_condition: return y that fired me up. http://en.wikipedia.org/wiki/Style_o...stance_fallacy Quoted Wikipedia -instant disqualification -you lose. Good night. Nov 16 '08 #11

 P: n/a On Nov 16, 7:34*am, John Machin

 P: n/a On Nov 17, 5:26*am, George Sakkis

 P: n/a Benjamin Kaplan wrote: If you really believe that, you haven't been following this list long enough. Every terminology dispute always includes at least 1 Wikipedia link. Also, you might want to look at this study: http://news.cnet.com/2100-1038_3-5997332.html That study has been disputed; see the links at the top of . /me ducks -- Nov 17 '08 #14

 P: n/a On Nov 17, 11:40*am, Matt Nordhoff . Now, if there was any independent refutation of the original study that isn't based on Britannica's - not that I'm outright accusing them of any bias here :) - that might make a reasonable disputation... Nov 17 '08 #15

 P: n/a On Sun, 16 Nov 2008 04:34:40 -0800, John Machin wrote: Nothing to do with style. It was the screaming inefficiency of: if non_trivial_condition: return x if not non_trivial_condition: return y that fired me up. "Screaming inefficiency"? Try "micro-optimization". The difference in execution time between "if x... if not x..." versus "if x... else..." on my slow, underpowered machine is about 10**-8 seconds. If that's your idea of "screaming inefficiency" I can't understand why you're programming in Python in the first place. Of course, if x is an expensive function call (say, a network lookup or database query rather than a relatively cheap list indexing operation) then the more readable, Pythonic solution will also be significantly faster. There's no doubt that it should be preferred -- I'm not defending it, as such, just pointing out the over-reaction of dismissing what is a generally well-written and thought-out article on the basis of a triviality. >http://en.wikipedia.org/wiki/Style_o...stance_fallacy Quoted Wikipedia -instant disqualification -you lose. Good night. Oh gosh, well, you've certainly proven your case, how could I be so stupid? My apology for thinking that you were acting like an arrogant, bad-tempered dick. I don't know *what* I was thinking. -- Steven who would link to Wikipedia for the definition of sarcasm except I've already lost once in this thread and that's enough. Nov 18 '08 #16

### This discussion thread is closed

Replies have been disabled for this discussion.