Eduardo Vieira wrote: > The other day I was writing a script to extract data from a file from > the line where a text is found to the end of the file. The same > functionality is this sed script: > '1,/regexp/'d > I couldn't put my head to work around this and came up with a solution > using list slicing. But how can I do that? I was experimenting with a > simple list and I came up with this. I wonder if I shouldn't you a > "while" statement, but how? > > a = ['m', 'a', 'r', 'i', 'g', 'o', 'l', 'd'] > b = True > > for letter in a: > if letter != 'i' and b: > continue > elif letter == 'i': > b = False > else: > print letter > > Ok. This works, but I wonder if I shouldn't you a "while" statement, but > how?
I would use two for loops: >>> a = ['m', 'a', 'r', 'i', 'g', 'o', 'l', 'd'] >>> ai = iter(a) # make a list iterator >>> for letter in ai: ... if letter == "i": break ... >>> for letter in ai: ... print letter ... g o l d Normally a list iterator is created implicitly by writing for item in some_list: ... but here you have to make one explicitly because you want to reuse it in the second loop. Alternatively, the itertools module has the building blocks for this and similar problems: >>> from itertools import dropwhile, islice >>> def not_an_i(letter): ... return letter != "i" ... >>> for letter in dropwhile(not_an_i, a): ... print letter ... i g o l d OK, let's shave off the first item in the dropwhile(...) sequence: >>> for letter in islice(dropwhile(not_an_i, a), 1, None): ... print letter ... g o l d Peter _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor