Is there a pythonic way (I know I can loop using range(len(..)) and get an index) to do the following example:
for line in list_of_strings:
if line[0] == '$':
while line[-1] == '#':
# read in the Next line and do stuff
# after quitting out of the while loop, the next iteration of the for loop
# should not get any of the lines that the while loop already dealt with
essentially, the nested while loop should be incrementing the for loop.
Edit: Not a file handle, confused two things I was working on, it's a list of strings
One of the most basic challenges in python is getting clever when iterating over list
s and dict
s. If you actually need to modify the collection while iterating, you may need to work on a copy, or store changes to apply at the end of iteration.
In your case, though, you just need to skip items in the list. You can probably manage this by expanding iteration into an more explicit form.
i = iter(list_of_strings)
for line in i:
if line.startswith('$'):
while line.endswith('#'):
line = i.next()
# do work on 'line' which begins with $ and doesn't end with #
and that's all you really need to do.
Edit: As kindall mentions, if the while portion may iterate past the end of the input sequence, you'll need to do a bit more. You can do the following.
i = iter(list_of_strings)
for line in i:
if line[0] == '$':
try:
while line[-1] == '#':
line = i.next()
except StopIteration:
break
# do work on 'line' which begins with $ and doesn't end with #
As long as file
is a file handle you can do this instead of using readlines():
for line in fh:
if line[0] == '$':
while line[-1] == '#':
line = next(fh)
File handles are iterable, and the next()
function retrieves the next value from an iterable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With