Hi! [EMAIL PROTECTED] 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?
Depends on what you mean with "better". I (heavily inspired by the bisect module) came up with: low = 0 high = len(L) while low < high: mid = (low + high) // 2 if L[mid] == 0: high = mid else: low = mid + 1 storage = L[:low] This has the advantage to be more efficient compared to other approaches, which of course only matters if your list is big. It still features a "while" loop, though. > hope this is clear. It is not entirely clear what the X is supposed to be. I assumed that it can be anything except 0. Cheers, Carl Friedrich -- http://mail.python.org/mailman/listinfo/python-list