Re: list manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg116392] Re: list manipulation
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sun, 13 Feb 2011 03:06:02 -0500 (EST)
On 2/12/11 at 5:17 AM, ngoble at iwu.edu (Nicholas Goble) wrote:
>You could try a "brute force" method:
>list3={}; For{i=1, i<=Length[list1], i++,
>AppendTo[list3, {list1[[i]], list2[[i]]}]
>];
This is one of the least efficient ways to do combine lists
possible. Consider
In[1]:= a = MemoryInUse[];
list1 = RandomInteger[100, {10000}];
list2 = RandomInteger[100, {10000}];
list3 = {};
b = MemoryInUse[];
In[6]:= For[i = 1, i <= Length[list1], i++,
AppendTo[list3, {list1[[i]], list2[[i]]}]]; // Timing
c = MemoryInUse[];
Out[6]= {0.636242,Null}
In[8]:= b - a
Out[8]= 87888
In[9]:= c - b
Out[9]= 1079008
versus
In[1]:= a = MemoryInUse[];
list1 = RandomInteger[100, {10000}];
list2 = RandomInteger[100, {10000}];
b = MemoryInUse[];
In[5]:= list3 = Transpose[{list1, list2}]; // Timing
c = MemoryInUse[];
Out[5]= {0.000218,Null}
In[7]:= b - a
Out[7]= 86584
In[8]:= c - b
Out[8]= 516480
Not only is using For and Append much slower, but it consumes
more memory. In part, this is due to Append making a copy of the
entire array when it adds a element at the end.