Question of Python second loop break and indexes

MRAB python at mrabarnett.plus.com
Wed May 9 05:13:00 EDT 2012


On 09/05/2012 09:36, lilin Yi wrote:
> //final_1 is a list of Identifier which I need to find corresponding
> files(four lines) in x(x is the  file) and write following four lines
> in a new file.
>
> //because the order of the identifier is the same, so after I find the
> same identifier in x , the next time I want to start from next index
> in x,which will save time. That is to say , when the if command
> satisfied ,it can automatically jump out out the second while loop and
> come to the next identifier of final_1 ,meanwhile the j should start
> not from the beginning but the position previous.
>
> //when I run the code it takes too much time more than one hour and
> give the wrong result....so could you help me make some improvement of
> the code?
>
> i=0
>
> offset_1=0
>
>
> while i<len(final_1):
> 	j = offset_1
> 	while j<len(x1):
> 		if final_1[i] == x1[j]:
> 			new_file.write(x1[j])
> 			new_file.write(x1[j+1])
> 			new_file.write(x1[j+2])
> 			new_file.write(x1[j+3])
> 			offset_1 = j+4
> 			quit_loop="True"
> 		if quit_loop == "True":break
> 		else: j=j +1
> 	i=i+1

This is roughly equivalent:

j = 0

for f in final_1:
     try:
         # Look for the identifier starting at index 'j'.
         j = x1.index(f, j)
     except ValueError:
         # Failed to find the identifier.
         pass
     else:
         # Found the identifier at index 'j'.
     	new_file.write(x1[j])
     	new_file.write(x1[j + 1])
     	new_file.write(x1[j + 2])
     	new_file.write(x1[j + 3])
     	# Skip over the 4 lines.
         j += 4



More information about the Python-list mailing list