# Test to output only non-repeated elements in a repeating list?

Posted 10 years ago
4671 Views
|
2 Replies
|
1 Total Likes
|
 I have a Nested List that returns a list of numbers which sometimes (but not always) begin to repeat.  Here is an example of an instance where the numbers begin repeating : In[3]:= NestList [ love[#, 37, 42] &, 1, 42 ]Out[3]= {1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16}Here, the numbers 1, 37, 16, 18, 10 begin to repeat.  I need to run the NestList a full 42 times, because sometimes it returns all unique numbers.  But in the cases where numbers repeat, I want to take only the unrepeated numbers and the first repeated number, then stop.  For instance, in the example above, I want {1, 37, 16, 18, 10, 1} as my output.  My Question: Is there a simple test I can run or some other means to achieve this?       Also relevant: i do not know how long the repeated sequence will be until execute the input.Thank you! Please forgive me if it is a very simple fix.
2 Replies
Sort By:
Posted 10 years ago
 Thank you Bill.  Works great.
Posted 10 years ago
 In[1]:= v = {1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10,    1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16, 18, 10, 1, 37, 16};    nonRepeated[v_] := Module[{i = 1},       While[Drop[v, i] != Drop[v, -i] && i < Length[v], i++];       If[i < Length[v], Take[v, i + 1], v]    ];  In[3]:= nonRepeated[v] Out[3]= {1, 37, 16, 18, 10, 1}In[4]:= nonRepeated[{1, 2, 3, 4, 5}]Out[4]= {1, 2, 3, 4, 5}But this depends on the repetitions beginning with the first item in your list.Test this carefully with all kinds of lists before you depend on it.