[Tutor] Request for help learning the right way to deal with listsin lists
Alan Gauld
alan.gauld at btinternet.com
Tue Jul 13 09:35:45 CEST 2010
"Siren Saren" <siren99 at yahoo.com> wrote
> say I have a list that's a composite of two elements:
> books and key pages / albums and favorite tracks /
> medicines and times taken, whatever.
Thats a good scenario for using a dictionary containing
a list or tuple per key.
> To make a program that does something to the
> first set of elements based on the second set of elements,
I'm not quite sure what you mean by this though...?
> if I am planning to, for example, tear out these key
> pages and make a wall hanging. Am I right to think
> that I want to get them into a form that clearly relates
> them to each other from the outset?
Yes, you should always try to find a data structure that
reflects the problem. It will naturally lead to simpler algorithms
and cleaner code.
> Does a dictionary make sense-- I've read that I should
> expect to put a lot of my data into dictionaries?
Yes a dictionary is a good structure for random lookups
based on a unique key that returns related data.
> a. Make a sublist of the Books.
You don't need a sublist, just use the dictionary.
> b. Look each up book in the main list to get an index values
You don't need index values, just use the dictionary directly.
> For book in Books:
> A dictionary should map the book to a list of all the elements
> in the main list that fall between the book's index value and
> the next book's index value
The dictionary returns the list of pages directly.
> I keep coming up with embedded loops to express this
> but I simultaneously feel like I am missing a third layer
You need a loop over the dictionary and possibly a loop over the
pages:
for book, pages in Books.items():
print book
for page in pages:
print 'page: ', page
If the data gets more complex you could put the data into a class:
class Book:
def __init__(self, title, pages=[]):
self.title = title
self.pages = pages
Books = [ Book('War & Peace", [3,56,88]),
Book("Huck Finn", [2,5,19]) ]
for book in Books:
print book.title, book.pages
Thre are many options, you need to decide which best suits your
problem.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list