[Tutor] design question -- nested loops considered harmful?

Brian van den Broek bvande at po-box.mcgill.ca
Tue Nov 30 03:26:37 CET 2004


Hi all,

in a recent post in the "comapring lists" thread, Danny Yoo wrote:

> whenever I see nested loops
> like this, I get nervous.  *grin*

This got me thinking about general design issues. In various programs I 
  have made much use of nested loops in order to parse data files. I've 
done this in cases where I am interested in pulling out some data which 
is identified by a delimiter. Below is a minimal example of the sort of 
thing I have been doing:

date_flag = '[Date]'
email_flag = '[Email]'
item_flags = [date_flag, email_flag]

def parse_file(list_of_lines):
     data_dict = {}
     for line in list_of_lines:
         for item in item_flags:
             if line.startswith(item):
                 data_dict[item] = line[len(item):]
                 break
     return data_dict

In this particular toy case, the "for i in item_flags" isn't too much 
help, as I've only listed two delimiters. But I often have a good many 
more, and thus thought the nested loop much better than a long list of 
if-tests. Since the logic in the "for item in item_flags:" loop is quite 
small, it never occurred to be to move it into its own function.

I think I see that the nervous-making aspect of nested loops comes from 
concern about clarity of control flow. (Is there some other worry I'm 
missing?) But is my sort of case one which shows a rule of thumb isn't a 
rigid law? Is there a much better design for my task that I've missed? 
Do more experience folk doubt my wisdom in taking the embedded loop to 
be too short to bother factoring out?

Thanks for any input. Best to all,

Brian vdB



More information about the Tutor mailing list