Re: reading a column from a file
f = open("datafile.txt", "r") data = [line.split('\t') for line in f] f.close() pressure = [float(d[1]) for d in data] temp = [float(d[2]) for d in data] --- This will parse the file into a matrix stored in 'data'. The last two lines simply iterate through second and third columns respectively, converting each element to a float (from string as it was read in from file) and assign to the appropriate vars. -- http://mail.python.org/mailman/listinfo/python-list
Binary tree problem (searching)
Hi all, I am running into a conceptual glitch in implementing a simple binary tree class. My insertion and printing (sorting) seems to be ok, but when I search the tree, my find method isn't doing what I thought it should. Here is the output of running my tests: >python -i trees.py ** File "trees.py", line 70, in __main__.BinaryTree.find Failed example: t.find('Leo') Expected: -1 Got nothing ** File "trees.py", line 72, in __main__.BinaryTree.find Failed example: t.find('Cancer') Expected: 1 Got nothing ** 1 items had failures: 2 of 7 in __main__.BinaryTree.find ***Test Failed*** 2 failures. >>> So it appears my find method is failing to return -1 for a missing key and 1 for any key below the root. If anyone could clue me in on why this is so, I'd appreciate it. Here is the code (trees.py): class BinaryTree: """Binary Tree""" def __init__(self, key, left=None, right=None): self.key = key self.left = left self.right = right def __str__(self): return str(self.key) def addNode(self,key): if key < self.key: if self.left: self.left.addNode(key) else: self.left = BinaryTree(key) elif key > self.key: if self.right: self.right.addNode(key) else: self.right = BinaryTree(key) def printTree(self): """ >>> t=BinaryTree('Capricorn') >>> t.addNode('Aquarius') >>> t.addNode('Pices') >>> t.addNode('Cancer') >>> t.printTree() Capricorn Aquarius Cancer Pices """ print self.key if self.left: self.left.printTree() if self.right: self.right.printTree() def printSortedTree(self): """ >>> t=BinaryTree('Capricorn') >>> t.addNode('Aquarius') >>> t.addNode('Pices') >>> t.addNode('Cancer') >>> t.printSortedTree() Aquarius Cancer Capricorn Pices """ if self.left: self.left.printSortedTree() print self.key if self.right: self.right.printSortedTree() def find(self, key, child=None): """ >>> t=BinaryTree('Capricorn') >>> t.addNode('Aquarius') >>> t.addNode('Pices') >>> t.addNode('Cancer') >>> t.find('Capricorn') 1 >>> t.find('Leo') -1 >>> t.find('Cancer') 1 """ if self.key == key: return 1 elif key < self.key: if self.left: self.left.find(key) else: return -1 elif key > self.key: if self.right: self.right.find(key) else: return -1 def _test(): import doctest doctest.testmod() if __name__ == '__main__': _test() -- http://mail.python.org/mailman/listinfo/python-list
Best way to emulate ordered dictionary (like in PHP)?
I am dealing with user profiles, which are simply a set of field-value pairs. I've tried to many things to list, but for one, I tried creating a wrapper class which inherits the dictionary and overrides the iterator. Unfortunately I don't understand iterators enough to get this working and before I waste any more time trying I figured I should check wether there is a better way. I have run into a similar problem once, and I resolved it by creating a wrapper class for the 'list' class which overides the get_item method, checks for string parameter, then accesses the appropriate item via a lookup 'list' contained within the class which maps the string parameter to the index number (eh, it just doesn't seem practical though). Now, I'e never used PHP, but apparently, it's dictionaries retain the order in which the items are entered and regurgitates them in that order when you iterate over them. That is exactly what I want, but can't seem to get in Python. Any help? Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Best way to emulate ordered dictionary (like in PHP)?
I am dealing with user profiles, which are simply a set of field-value pairs. I've tried to many things to list, but for one, I tried creating a wrapper class which inherits the dictionary and overrides the iterator. Unfortunately I don't understand iterators enough to get this working and before I waste any more time trying I figured I should check wether there is a better way. I have run into a similar problem once, and I resolved it by creating a wrapper class for the 'list' class which overides the get_item method, checks for string parameter, then accesses the appropriate item via a lookup 'list' contained within the class which maps the string parameter to the index number (eh, it just doesn't seem practical though). Now, I'e never used PHP, but apparently, it's dictionaries retain the order in which the items are entered and regurgitates them in that order when you iterate over them. That is exactly what I want, but can't seem to get in Python. Any help? Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list
Re: Best way to emulate ordered dictionary (like in PHP)?
Great, that recipe is exactly what I needed, and much cleaner than my clumsy attempts. Thank you for your help. -- http://mail.python.org/mailman/listinfo/python-list