> > head, tail = s[0], s[1:] > oh man that's so much cleaner in python 3, simply:
head, *tail = s On Thu, Aug 29, 2013 at 9:49 PM, Joseph Wright <jos...@mammalia.net> wrote: > No, it wouldn't help with the iteration, but I thought you were having a > problem seeing the representation of your object. Now I'm trying to figure > this thing out…. > > It looks like the reason the 'char' only showing the first letter is > because in the add() method, the first letter of the string is what it > assigns to head: > > head, tail = s[0], s[1:] > > So it uses just one letter at a time per node. > > Joseph > > > On Aug 29, 2013, at 8:55 PM, Maria McKinley <mar...@mariakathryn.net> > wrote: > > Not yet, would that solve the problem that it is not iterating? Using some > good old-fashioned print statements, I found out a little bit more. > > I added the following print statements: > > for char, node in self.root.iteritems(): > # node.value is none when not at end of word > > if node.value is None: > print 'none' > print 'char',char > print 'node',node > yield node.items() > else: > print 'stuff' > yield node > > And this was the output. There are 2 words in the trie, but it only > reports the first letter of each word, and stops: > > none > char p > node <trie.Trie instance at 0x10e8d0560> > <generator object items at 0x10e8bc690> > none > char t > node <trie.Trie instance at 0x10e8bab48> > <generator object items at 0x10e8bc5a0> > > ~maria > > > On Thu, Aug 29, 2013 at 7:59 PM, Joseph Wright <jos...@mammalia.net>wrote: > >> Have you tried defining __repr__? >> >> Joseph >> >> On Aug 29, 2013, at 7:56 PM, Maria McKinley <mar...@mariakathryn.net> >> wrote: >> >> Thanks Morris. That does answer one question, I can't assume code on >> wikipedia is bug-free. Changing it doesn't solve the problem, >> unfortunately, but you are right, time to hit the debugger. Thanks everyone. >> >> cheers, >> Maria >> >> >> On Thu, Aug 29, 2013 at 5:46 PM, Morris Bernstein < >> mor...@systems-deployment.com> wrote: >> >>> I hate to suggest this because I almost never use it, but have you >>> considered using the pdb debugger and setting a breakpoint? >>> >>> Meanwhile, your problem is here: >>> def items(self): >>> """Return an iterator over the items of the `Trie`.""" >>> for char, node in self.root.iteritems(): >>> if node.value is None: >>> yield node.items >>> >>> node.items is the the Trie.items() method bound to the node object. >>> >>> I think, taking a quick look at the code, you want to yield >>> node.items(), function call again. Looks like the same problem. >>> >>> >>> >>> >>> >>> >>> >>> On Thu, Aug 29, 2013 at 5:17 PM, Maria McKinley <mar...@mariakathryn.net >>> > wrote: >>> >>>> Doh. Thanks. This does the trick, but it gives me the instance >>>> location. I assumed this is because there is no __str__ method defined, but >>>> when I added a __str__ method it didn't change anything. Probably didn't >>>> implement the __str__ method correctly, but since I didn't even get an >>>> error, not sure this was even the problem. (Pretty sure, for example, that >>>> I shouldn't always be referencing the head node.) >>>> >>>> def __str__(self): >>>> return "Node letter is %s" % (self.root[0]) >>>> >>>> for c in mytrie.items(): >>>> print c >>>> ...: >>>> <bound method Trie.items of <trie.Trie instance at 0x1010dc710>> >>>> <bound method Trie.items of <trie.Trie instance at 0x1010dca70>> >>>> >>>> thanks again, >>>> Maria >>>> >>>> >>>> On Thu, Aug 29, 2013 at 4:40 PM, Cris Ewing <c...@crisewing.com> wrote: >>>> >>>>> I expect that the problem here is that you are attempting to iterate >>>>> over the method itself, rather than its result. You'd need to call the >>>>> method to do that: >>>>> >>>>> for c in mytrie.items(): >>>>> print c >>>>> >>>>> hth >>>>> >>>>> c >>>>> >>>>> On Aug 29, 2013, at 4:38 PM, Maria McKinley wrote: >>>>> >>>>> Hello, >>>>> >>>>> I hope someone on this list doesn't mind answering what I think is a >>>>> quick question. I have been playing around with the python code found >>>>> here: >>>>> >>>>> http://en.wikipedia.org/wiki/Trie#A_Python_version >>>>> >>>>> I can't get the iterator to work, and I wonder if I'm not calling it >>>>> correctly. I thought once I made my object, and added stuff to it, I could >>>>> just do this: >>>>> >>>>> for c in mytrie.items: >>>>> print c >>>>> >>>>> but I get this error: >>>>> >>>>> TypeError: 'instancemethod' object is not iterable >>>>> >>>>> What am I doing wrong? >>>>> >>>>> thanks, >>>>> Maria >>>>> >>>>> >>>>> Cris Ewing >>>>> -------------------------------------------------- >>>>> Principal, Cris Ewing, Developer LLC >>>>> http://www.crisewing.com >>>>> c...@crisewing.com >>>>> 1.206.724.2112 >>>>> >>>>> >>>> >>>> >>>> -- >>>> Maria Mckinley >>>> Software Developer with Bonus SysAdmin Experience >>>> www.mariakathryn.net >>>> www.linkedin.com/in/mariamckinley >>>> >>> >>> >> >> >> -- >> Maria Mckinley >> Software Developer with Bonus SysAdmin Experience >> www.mariakathryn.net >> www.linkedin.com/in/mariamckinley >> >> >> > > > -- > Maria Mckinley > Software Developer with Bonus SysAdmin Experience > www.mariakathryn.net > www.linkedin.com/in/mariamckinley > > >