[Tutor] how to extract data only after a certain condition is met

Knacktus knacktus at googlemail.com
Wed Oct 6 19:32:56 CEST 2010


Am 06.10.2010 18:25, schrieb Eduardo Vieira:
> 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?
Why would you want to use a while-loop? You would need to somehow stop 
the iteration (by catching some EOF Exception or the like). I think it's 
fine to use a for-loop as you have a predefined fixed number of 
iterations. I think your approach is OK. Easy to understand. But what if 
there's a second "i" after the first? In your solution all "i" are 
skipped. Also, I would choose clearer names:

letters = ['m', 'a', 'r', 'i', 'g', 'o', 'l', 'd', 'i', 'n', 'i', 'o']
skip_letter = True

for letter in letters:
     if letter == 'i' and skip_letter:
	skip_letter = False
	continue  # if you don't want the first occurrence of "i"
     if not skip_letter:
  	print letter

Cheers,

Jan


More information about the Tutor mailing list