```Date: Mar 26, 2013 4:05 AM
Author: Bill Rowe
Subject: Re: Table with condition

On 3/24/13 at 11:23 PM, Serych@panska.cz wrote:>Dear mathgroup, I need to start creating list and continue until>some condition is not met.  For example to generate list of random>numbers until the value is not 5. Yes, it is theoreticaly possible>to generate list with sufficient length, and cut it on the right>place afterwords, but it is very inefficient way if the computation>is much harder than just generation of random numbers.>TakeWhile[Table[RandomInteger[{0, 10}], {15}], # != 5 &]>Using the while cycle is the other way, but I can only print values>using that method, but I don't know, how to generate classical list:>r = 0; While[r != 5, r = RandomInteger[{0, 10}]; Print[r]]>What is the right solution of such a simple problem?What you might want to use is NestWhileList. Using your exampleof RandomInteger you could do it as:In[9]:= Most@  NestWhileList[(#; RandomInteger[{0, 10}]) &,   RandomInteger[{0, 10}], (# != 5) &]Out[9]= {4,8,10,3,9,6,4,0,6,3,2,1,7,7,4,8,3,2}What might be more efficient when each result really doesn'tdepend on the previous result could be something like:In[16]:= list = {}; r = 0;While[r != 5, list = {list, r = RandomInteger[{0, 10}]}];Most@Flatten[list]Out[18]= {2,9,9,0,6,4,0,0,7,7,4,7}Note, the issue of whether to generate a list of random integersthen use TakeWhile isn't just a question of efficiency. Nomatter what length list you generate, there is always someprobability of it not having a 5. By pre-selecting the listlength you eliminate the possibility of having longer listswhich could occur.
```