This might be confusing to explain, because it's a question about an example in Beginning Python and I'll try to provide all the info I can.
First off, I'm reading a chapter on using the ReportLab modules to create a line graph from a set of data. The first implementation of the program uses a hard-coded list as the data source, the second implementation pulls the data from a URL. In either case, the data is of this format: # year month predicted high low 2004 12 34.2 35.2 33.2 2005 01 31.5 34.5 28.5 (repeated many times) In the first implementation, the data was a list of tuples, each tuple being one row of the data. So grabbing the data was done like this: pred = [row[2]-40 for row in data] high = [row[3]-40 for row in data] etc... We can safely ignore the '-40', that was just for positioning. So the variable for predicted would grab 34.2, 31.5, etc., high would get 35.2, etc. Easy enough. Now, the second implementation does this: for line in urlopen(URL).readlines(): if not line.isspace() and not line[0] in COMMENT_CHARS: data.append(map(float, line.split())) pred = [row[2] for row in data] high = [row[3] for row in data] etc. (URL is the location of the data file online. The if statement just checks for blank lines and lines beginning with certain comment characters, so they can be ignored.) So finally here's my question: If you are using data.append(), doesn't that just put all the numbers into one long list? How are the tuples still being created in this case so that the list comprehensions still work? It seems like there is no longer any 'row' to refer to in data. The only thing I can think of is that each time through the for loop, a new item (tuple or list) is being created in the data list, so that each row of data really is being separated as its own element in the larger list, but that doesn't seem right. Thanks! -- http://mail.python.org/mailman/listinfo/python-list