Not Incrementing
Dave Angel
davea at ieee.org
Thu Dec 31 15:45:18 EST 2009
Victor Subervi wrote:
> On Thu, Dec 31, 2009 at 12:19 PM, MRAB <python at mrabarnett.plus.com> wrote:
>
>
>> Victor Subervi wrote:
>>
>>
>>> Hi;
>>> This "pseudo-code" snippet was given to me by Dennis on this list (whose
>>> last name escapes me):
>>>
>>> def printTree(allTrees, level=0):
>>> tree = []
>>> for aTree in allTrees:
>>> for name in sorted(aTree.keys()):
>>> tree.append("%s%s" % ("\t" * level, name))
>>> printTree(aTree[name], level + 1)
>>> return tree
>>>
>>> The code returns all the categories ("name") just fine. It doesn't,
>>> however, increment level. I know from my tests that printTree is only called
>>> twice (once for each store) and about half a dozen times recursively within
>>> one of those stores. Why doesn't this increment? Full code follows.
>>>
>>>
>> [snip]
>>
>> 'level' is the amount by which the items should be indented. It doesn't
>> need to be incremented for each item (if that's what you mean). When
>> 'printTree' calls itself to print a subtree, it passes in level + 1 so
>> that the items in the subtree will be indented by one more level.
>>
>>
>
> Yeah, that's what level is for *now*. But I need to change that to nest
> menus.
>
>
>> The function looks slightly wrong to me because it's appending items to
>> a list and returning that list, but ignoring the result of printing the
>> subtree when it calls itself. Perhaps it should be this:
>>
>>
>> def printTree(allTrees, level=0):
>> tree = []
>> for aTree in allTrees:
>> for name in sorted(aTree.keys()):
>> tree.append("%s%s" % ("\t" * level, name))
>> tree += printTree(aTree[name], level + 1)
>> return tree
>>
>>
>
> How do you concatenate a tuple? If we append tree, we can't concatenate it,
> can we?
> beno
>
>
You can't concatenate a tuple; tuples are immutable. Fortunately, tree
is a list, which you can concatenate together. Either use extend(),
which I suggested earlier, or use +=, as MRAB says above.
tree.extend(printTree(...))
DaveA
More information about the Python-list
mailing list