i=2; lst=[i**=2 while i<1000]

Chris F.A. Johnson cfajohnson at gmail.com
Tue Dec 6 11:10:51 EST 2005


On 2005-12-06, Steve Holden wrote:
> Daniel Schüle wrote:
>> hi,
>> 
>> [...]
>> 
>> 
>>>># pseudo code
>>>>i=2
>>>>lst=[i**=2 while i<1000]
>>>>
>>>>of course this could be easily rewritten into
>>>>i=2
>>>>lst=[]
>>>>while i<1000:
>>>>    i**=2
>>>>    lst.append(i)
>>>>
>>>
>>>
>>>Neither of these loops would terminate until memory is exhausted. Do you 
>>>have a use case for a 'while' in a list comprehension which would 
>>>terminate?
>> 
>> 
>> unless I am missing something obvious, I can not see why the loop should 
>> not terminate
>
> In that case, kindly explain how the condition i<1000 can become false 
> when it starts at 2 and never changes! [In other words: you *are* 
> missing something obvious].

    What does i**=2 do if not change i?

>>> i=2
>>> lst=[]
>>> while i<1000:
...     i**=2
...     lst.append(i)
... 
>>> lst
[4, 16, 256, 65536]


-- 
   Chris F.A. Johnson, author   |    <http://cfaj.freeshell.org>
   Shell Scripting Recipes:     |  My code in this post, if any,
   A Problem-Solution Approach  |          is released under the
   2005, Apress                 |     GNU General Public Licence



More information about the Python-list mailing list