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 -- http://mail.python.org/mailman/listinfo/python-list