references/addrresses in imperative languages
Terry Hancock
hancock at anansispaceworks.com
Sun Jun 19 23:25:13 EDT 2005
On Sunday 19 June 2005 05:34 pm, Xah Lee wrote:
> in coding Python yesterday, i was quite stung by the fact that lists
> appened to another list goes by as some so-called "reference". e.g.
>
> t=range(5)
> n=range(3)
> n[0]='m'
> t.append(n)
> n[0]='h'
> t.append(n)
> print t
Day one in learning Python, yes --- "names bind to objects" NOT
"variables are filled with values". This is one case where prior
experience with C warps your brain.
> in the following code, after some 1 hour, finally i found the solution
> of h[:]. (and that's cheating thru a google search)
>
> def parti(l,j):
> '''parti(l,j) returns l partitioned with j elements per group. If j
> is not a factor of length of l, then the reminder elements are dropped.
> Example: parti([1,2,3,4,5,6],2) returns [[1,2],[3,4],[5,6]]
> Example: parti([1,2,3,4,5,6,7],3) returns [[1,2,3],[4,5,6]]'''
> n=len(l)/j
> r=[] # result list
> h=range(j) # temp holder for sublist
> for n1 in range(n):
> for j1 in range(j):
> h[j1]=l[n1*j+j1]
> r.append( h[:] )
> return r
Too bulky? How about:
def parti(L, j):
return [L[k*j:(k+1)*j] for k in range(len(L)/j)]
e.g.:
>>>
>>> parti([1,2,3,4,5,6,7],3)
[[1, 2, 3], [4, 5, 6]]
>>> parti([1,2,3,4,5,6],2)
[[1, 2], [3, 4], [5, 6]]
> PS is there any difference between
> t=t+[li]
> t.append(li)
No, but
t=t+[li]
is quite different from
t.append([li])
--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks http://www.anansispaceworks.com
More information about the Python-list
mailing list