is there a better way?

Scott David Daniels scott.daniels at acm.org
Fri Feb 10 14:29:42 EST 2006


markscala at gmail.com wrote:
> Problem:
> 
> You have a list of unknown length, such as this: list =
> [X,X,X,O,O,O,O].  You want to extract all and only the X's.  You know
> the X's are all up front and you know that the item after the last X is
> an O, or that the list ends with an X.  There are never O's between
> X's.
> 
> I have been using something like this:
> while list[0] != O:
>     storage.append(list[0])
>     list.pop(0)
>     if len(list) == 0:
>         break
> But this seems ugly to me, and using "while" give me the heebies.  Is
> there a better approach?
> 

Your names could be better as someone mentioned.
     ex, oh = 7, 13   # for example
     data = [ex, ex, ex, oh, oh, oh, oh]
If you need a list distinct from the original:
     try:
         result = data[: data.index(oh)]
     except ValueError:
         result = list(data)

Or you could simply:
     try:
         data = data[: data.index(oh)]
     except ValueError:
         pass
and data will be either the sublist you want or the original list.

-- 
-Scott David Daniels
scott.daniels at acm.org



More information about the Python-list mailing list