Python论坛  - 讨论区

标题:[python-chinese] 从print到list

2006年07月11日 星期二 22:14

linda.s samrobertsmith at gmail.com
Tue Jul 11 22:14:56 HKT 2006

用如下代码,
        >>> t=BinaryTree('Capricorn')
        >>> t.addNode('Aquarius')
        >>> t.addNode('Pices')
        >>> t.addNode('Cancer')
        >>> t.printTree()
        Capricorn
        Aquarius
        Cancer
        Pices

有什么办法把 printTree 里的print 转化为list吗?
也就是:['Capricorn','Aquarius','Cancer','Pices']

class BinaryTree:

  def __init__(self, key, left=None, right=None, parent=None):
      self.key = key
      self.left = left
      self.right = right
      self.parent = parent

  def addNode(self,key):
      """Add a node in the proper location."""
      if key < self.key:
          if self.left:
              self.left.addNode(key)
          else:
              self.left = BinaryTree(key, parent=self)
      elif key > self.key:
          if self.right:
              self.right.addNode(key)
          else:
              self.right = BinaryTree(key, parent=self)

    def printTree(self):
        print self.key
        if self.left:
            self.left.printTree()
        if self.right:
            self.right.printTree()

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月11日 星期二 22:22

limodou limodou at gmail.com
Tue Jul 11 22:22:19 HKT 2006

On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> 用如下代码,
>         >>> t=BinaryTree('Capricorn')
>         >>> t.addNode('Aquarius')
>         >>> t.addNode('Pices')
>         >>> t.addNode('Cancer')
>         >>> t.printTree()
>         Capricorn
>         Aquarius
>         Cancer
>         Pices
>
> 有什么办法把 printTree 里的print 转化为list吗?
> 也就是:['Capricorn','Aquarius','Cancer','Pices']
>
> class BinaryTree:
>
>   def __init__(self, key, left=None, right=None, parent=None):
>       self.key = key
>       self.left = left
>       self.right = right
>       self.parent = parent
>
>   def addNode(self,key):
>       """Add a node in the proper location."""
>       if key < self.key:
>           if self.left:
>               self.left.addNode(key)
>           else:
>               self.left = BinaryTree(key, parent=self)
>       elif key > self.key:
>           if self.right:
>               self.right.addNode(key)
>           else:
>               self.right = BinaryTree(key, parent=self)
>
>     def printTree(self):
>         print self.key
>         if self.left:
>             self.left.printTree()
>         if self.right:
>             self.right.printTree()
>
把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊。

-- 
I like python!
My Blog: http://www.donews.net/limodou
My Django Site: http://www.djangocn.org
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月11日 星期二 22:44

linda.s samrobertsmith at gmail.com
Tue Jul 11 22:44:23 HKT 2006

On 7/11/06, limodou <limodou at gmail.com> wrote:
> On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > 用如下代码,
> >         >>> t=BinaryTree('Capricorn')
> >         >>> t.addNode('Aquarius')
> >         >>> t.addNode('Pices')
> >         >>> t.addNode('Cancer')
> >         >>> t.printTree()
> >         Capricorn
> >         Aquarius
> >         Cancer
> >         Pices
> >
> > 有什么办法把 printTree 里的print 转化为list吗?
> > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> >
> > class BinaryTree:
> >
> >   def __init__(self, key, left=None, right=None, parent=None):
> >       self.key = key
> >       self.left = left
> >       self.right = right
> >       self.parent = parent
> >
> >   def addNode(self,key):
> >       """Add a node in the proper location."""
> >       if key < self.key:
> >           if self.left:
> >               self.left.addNode(key)
> >           else:
> >               self.left = BinaryTree(key, parent=self)
> >       elif key > self.key:
> >           if self.right:
> >               self.right.addNode(key)
> >           else:
> >               self.right = BinaryTree(key, parent=self)
> >
> >     def printTree(self):
> >         print self.key
> >         if self.left:
> >             self.left.printTree()
> >         if self.right:
> >             self.right.printTree()
> >
> 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊

试过,结果只给了我第一个值'Capricorn'
    def tree2list(self):
        b=[]
        b.append(self.key)
        if self.left:
            self.left.tree2list()
        if self.right:
            self.right.tree2list()
        return b

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月11日 星期二 22:49

limodou limodou at gmail.com
Tue Jul 11 22:49:03 HKT 2006

On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> On 7/11/06, limodou <limodou at gmail.com> wrote:
> > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > 用如下代码,
> > >         >>> t=BinaryTree('Capricorn')
> > >         >>> t.addNode('Aquarius')
> > >         >>> t.addNode('Pices')
> > >         >>> t.addNode('Cancer')
> > >         >>> t.printTree()
> > >         Capricorn
> > >         Aquarius
> > >         Cancer
> > >         Pices
> > >
> > > 有什么办法把 printTree 里的print 转化为list吗?
> > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > >
> > > class BinaryTree:
> > >
> > >   def __init__(self, key, left=None, right=None, parent=None):
> > >       self.key = key
> > >       self.left = left
> > >       self.right = right
> > >       self.parent = parent
> > >
> > >   def addNode(self,key):
> > >       """Add a node in the proper location."""
> > >       if key < self.key:
> > >           if self.left:
> > >               self.left.addNode(key)
> > >           else:
> > >               self.left = BinaryTree(key, parent=self)
> > >       elif key > self.key:
> > >           if self.right:
> > >               self.right.addNode(key)
> > >           else:
> > >               self.right = BinaryTree(key, parent=self)
> > >
> > >     def printTree(self):
> > >         print self.key
> > >         if self.left:
> > >             self.left.printTree()
> > >         if self.right:
> > >             self.right.printTree()
> > >
> > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
>
> 试过,结果只给了我第一个值'Capricorn'
>     def tree2list(self):
>         b=[]
>         b.append(self.key)
>         if self.left:
>             self.left.tree2list()
>         if self.right:
>             self.right.tree2list()
>         return b
>
把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。

-- 
I like python!
My Blog: http://www.donews.net/limodou
My Django Site: http://www.djangocn.org
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月11日 星期二 23:15

麦田守望者 qcxhome at gmail.com
Tue Jul 11 23:15:04 HKT 2006

把b作为BinaryTree的类成员变量声明

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 05:29

linda.s samrobertsmith at gmail.com
Wed Jul 12 05:29:25 HKT 2006

On 7/11/06, limodou <limodou at gmail.com> wrote:
> On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > 用如下代码,
> > > >         >>> t=BinaryTree('Capricorn')
> > > >         >>> t.addNode('Aquarius')
> > > >         >>> t.addNode('Pices')
> > > >         >>> t.addNode('Cancer')
> > > >         >>> t.printTree()
> > > >         Capricorn
> > > >         Aquarius
> > > >         Cancer
> > > >         Pices
> > > >
> > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > >
> > > > class BinaryTree:
> > > >
> > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > >       self.key = key
> > > >       self.left = left
> > > >       self.right = right
> > > >       self.parent = parent
> > > >
> > > >   def addNode(self,key):
> > > >       """Add a node in the proper location."""
> > > >       if key < self.key:
> > > >           if self.left:
> > > >               self.left.addNode(key)
> > > >           else:
> > > >               self.left = BinaryTree(key, parent=self)
> > > >       elif key > self.key:
> > > >           if self.right:
> > > >               self.right.addNode(key)
> > > >           else:
> > > >               self.right = BinaryTree(key, parent=self)
> > > >
> > > >     def printTree(self):
> > > >         print self.key
> > > >         if self.left:
> > > >             self.left.printTree()
> > > >         if self.right:
> > > >             self.right.printTree()
> > > >
> > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> >
> > 试过,结果只给了我第一个值'Capricorn'
> >     def tree2list(self):
> >         b=[]
> >         b.append(self.key)
> >         if self.left:
> >             self.left.tree2list()
> >         if self.right:
> >             self.right.tree2list()
> >         return b
> >
> 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。

我还是不明白.新手上路,多多原谅.

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 06:02

linda.s samrobertsmith at gmail.com
Wed Jul 12 06:02:38 HKT 2006

On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> On 7/11/06, limodou <limodou at gmail.com> wrote:
> > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > 用如下代码,
> > > > >         >>> t=BinaryTree('Capricorn')
> > > > >         >>> t.addNode('Aquarius')
> > > > >         >>> t.addNode('Pices')
> > > > >         >>> t.addNode('Cancer')
> > > > >         >>> t.printTree()
> > > > >         Capricorn
> > > > >         Aquarius
> > > > >         Cancer
> > > > >         Pices
> > > > >
> > > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > > >
> > > > > class BinaryTree:
> > > > >
> > > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > > >       self.key = key
> > > > >       self.left = left
> > > > >       self.right = right
> > > > >       self.parent = parent
> > > > >
> > > > >   def addNode(self,key):
> > > > >       """Add a node in the proper location."""
> > > > >       if key < self.key:
> > > > >           if self.left:
> > > > >               self.left.addNode(key)
> > > > >           else:
> > > > >               self.left = BinaryTree(key, parent=self)
> > > > >       elif key > self.key:
> > > > >           if self.right:
> > > > >               self.right.addNode(key)
> > > > >           else:
> > > > >               self.right = BinaryTree(key, parent=self)
> > > > >
> > > > >     def printTree(self):
> > > > >         print self.key
> > > > >         if self.left:
> > > > >             self.left.printTree()
> > > > >         if self.right:
> > > > >             self.right.printTree()
> > > > >
> > > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> > >
> > > 试过,结果只给了我第一个值'Capricorn'
> > >     def tree2list(self):
> > >         b=[]
> > >         b.append(self.key)
> > >         if self.left:
> > >             self.left.tree2list()
> > >         if self.right:
> > >             self.right.tree2list()
> > >         return b
> > >
> > 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。
>
> 我还是不明白.新手上路,多多原谅.
>
我做了这些改动:
加了self.list= [],
    def __init__(self, key, left=None, right=None, parent=None):
        self.key = key
        self.left = left
        self.right = right
        self.parent = parent
        self.list= []
    def tree2list(self):
        self.list.append(self.key)
        if self.left:
            self.left.tree2list()
        if self.right:
            self.right.tree2list()
        return self.list
但是结果还是一样,只给了我第一个值'Capricorn'.

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 07:33

imcs ee imcsee at gmail.com
Wed Jul 12 07:33:53 HKT 2006

看了你最后的这个代码,是不是四个值分别被return,但是只有最后一次return的Capricorn返回给了调用函数。
如果把ruturn改成yield,应该就差不多了吧。
我写的tree2list函数是
    def tree2list(self):
        yield self.key
        if self.left:
            for foo in self.left.tree2list():
                yield foo
        if self.right:
            for foo in self.right.tree2list():
                yield foo
调用代码是
test = [item for item in t.tree2list()]
python的缩进,好像在邮件列表里面有问题啊...我把代码放在附件里面了。
运行结果是
Capricorn
Aquarius
Cancer
Pices
test=  ['Capricorn', 'Aquarius', 'Cancer', 'Pices']

On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
> On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > > 用如下代码,
> > > > > >         >>> t=BinaryTree('Capricorn')
> > > > > >         >>> t.addNode('Aquarius')
> > > > > >         >>> t.addNode('Pices')
> > > > > >         >>> t.addNode('Cancer')
> > > > > >         >>> t.printTree()
> > > > > >         Capricorn
> > > > > >         Aquarius
> > > > > >         Cancer
> > > > > >         Pices
> > > > > >
> > > > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > > > >
> > > > > > class BinaryTree:
> > > > > >
> > > > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > > > >       self.key = key
> > > > > >       self.left = left
> > > > > >       self.right = right
> > > > > >       self.parent = parent
> > > > > >
> > > > > >   def addNode(self,key):
> > > > > >       """Add a node in the proper location."""
> > > > > >       if key < self.key:
> > > > > >           if self.left:
> > > > > >               self.left.addNode(key)
> > > > > >           else:
> > > > > >               self.left = BinaryTree(key, parent=self)
> > > > > >       elif key > self.key:
> > > > > >           if self.right:
> > > > > >               self.right.addNode(key)
> > > > > >           else:
> > > > > >               self.right = BinaryTree(key, parent=self)
> > > > > >
> > > > > >     def printTree(self):
> > > > > >         print self.key
> > > > > >         if self.left:
> > > > > >             self.left.printTree()
> > > > > >         if self.right:
> > > > > >             self.right.printTree()
> > > > > >
> > > > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> > > >
> > > > 试过,结果只给了我第一个值'Capricorn'
> > > >     def tree2list(self):
> > > >         b=[]
> > > >         b.append(self.key)
> > > >         if self.left:
> > > >             self.left.tree2list()
> > > >         if self.right:
> > > >             self.right.tree2list()
> > > >         return b
> > > >
> > > 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。
> >
> > 我还是不明白.新手上路,多多原谅.
> >
> 我做了这些改动:
> 加了self.list= [],
>    def __init__(self, key, left=None, right=None, parent=None):
>        self.key = key
>        self.left = left
>        self.right = right
>        self.parent = parent
>        self.list= []
>    def tree2list(self):
>        self.list.append(self.key)
>        if self.left:
>            self.left.tree2list()
>        if self.right:
>            self.right.tree2list()
>        return self.list
> 但是结果还是一样,只给了我第一个值'Capricorn'.
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
#!/usr/bin/env python
class BinaryTree:
    def __init__(self, key, left=None, right=None, parent=None):
        self.key = key
        self.left = left
        self.right = right
        self.parent = parent
    def addNode(self,key):
        """Add a node in the proper location."""
        if key < self.key:
            if self.left:
                self.left.addNode(key)
            else:
                self.left = BinaryTree(key, parent=self)
        elif key > self.key:
            if self.right:
                self.right.addNode(key)
            else:
                self.right = BinaryTree(key, parent=self)

    def printTree(self):
        print self.key
        if self.left:
            self.left.printTree()
        if self.right:
            self.right.printTree()
    def tree2list(self):
        yield self.key
        if self.left:
            for foo in self.left.tree2list():
                yield foo
        if self.right:
            for foo in self.right.tree2list():
                yield foo
def main():
    t=BinaryTree('Capricorn')
    t.addNode('Aquarius')
    t.addNode('Pices')
    t.addNode('Cancer')
    t.printTree()
    test = [item for item in t.tree2list()]
    print 'test= ', test        
if __name__ == "__main__":
    main()


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 10:08

lubiao lubiao.py at gmail.com
Wed Jul 12 10:08:04 HKT 2006

class BinaryTree:
  def __init__(self, key, left=None, right=None, parent=None):
    self.key = key
    self.left = left
    self.right = right
    self.parent = parent

  def addNode(self,key):
    """Add a node in the proper location."""
    if key < self.key:
      if self.left:
         self.left.addNode(key)
      else:
         self.left = BinaryTree(key, parent=self)
    elif key > self.key:
      if self.right:
         self.right.addNode(key)
      else:
         self.right = BinaryTree(key, parent=self)

  def printTree(self):
    print self.key
    if self.left:
      self.left.printTree()
    if self.right:
      self.right.printTree()

  def createKeyList(self, outLs):
    outLs.append(self.key)
    if self.left:
      self.left.createKeyList(outLs)
    if self.right:
      self.right.createKeyList(outLs)

if __name__ == '__main__':
   t=BinaryTree('Capricorn')
   t.addNode('Aquarius')
   t.addNode('Pices')
   t.addNode('Cancer')
   t.printTree()
   ls = []
   t.createKeyList(ls)
   print ls


On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
>
> 用如下代码,
>        >>> t=BinaryTree('Capricorn')
>        >>> t.addNode('Aquarius')
>        >>> t.addNode('Pices')
>        >>> t.addNode('Cancer')
>        >>> t.printTree()
>        Capricorn
>        Aquarius
>        Cancer
>        Pices
>
> 有什么办法把 printTree 里的print 转化为list吗?
> 也就是:['Capricorn','Aquarius','Cancer','Pices']
>
> class BinaryTree:
>
> def __init__(self, key, left=None, right=None, parent=None):
>      self.key = key
>      self.left = left
>      self.right = right
>      self.parent = parent
>
> def addNode(self,key):
>      """Add a node in the proper location."""
>      if key < self.key:
>          if self.left:
>              self.left.addNode(key)
>          else:
>              self.left = BinaryTree(key, parent=self)
>      elif key > self.key:
>          if self.right:
>              self.right.addNode(key)
>          else:
>              self.right = BinaryTree(key, parent=self)
>
>    def printTree(self):
>        print self.key
>        if self.left:
>            self.left.printTree()
>        if self.right:
>            self.right.printTree()
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to   python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060712/67e84a98/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 11:56

Jerry jetport at gmail.com
Wed Jul 12 11:56:28 HKT 2006

>
>
> 我做了这些改动:
> 加了self.list= [],
>    def __init__(self, key, left=None, right=None, parent=None):
>        self.key = key
>        self.left = left
>        self.right = right
>        self.parent = parent
>        self.list= []
>    def tree2list(self):
>        self.list.append(self.key)
>        if self.left:
>            self.left.tree2list()
>        if self.right:
>            self.right.tree2list()
>        return self.list
> 但是结果还是一样,只给了我第一个值'Capricorn'.



因为你这棵树拥有了许多实例
self.list.append(self.key)这句都是往不同实例的list插入(用内置型名做Name好像不好)

你可以把递归函数改成
def tree2list(self,alist):
把list从外面传进去





-- 
If U can see it, then U can do it
If U just believe it, there's nothing to it
I believe U can fly
JetPort:80
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060712/8f189125/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 14:29

linda.s samrobertsmith at gmail.com
Wed Jul 12 14:29:08 HKT 2006

有什么办法把
test = [item for item in t.tree2list()]
能直接放进类里,也就是,
t.tree2list()直接就给['Capricorn', 'Aquarius', 'Cancer', 'Pices']

On 7/11/06, imcs ee <imcsee at gmail.com> wrote:
> 看了你最后的这个代码,是不是四个值分别被return,但是只有最后一次return的Capricorn返回给了调用函数。
> 如果把ruturn改成yield,应该就差不多了吧。
> 我写的tree2list函数是
>    def tree2list(self):
>        yield self.key
>        if self.left:
>            for foo in self.left.tree2list():
>                yield foo
>        if self.right:
>            for foo in self.right.tree2list():
>                yield foo
> 调用代码是
> test = [item for item in t.tree2list()]
> python的缩进,好像在邮件列表里面有问题啊...我把代码放在附件里面了。
> 运行结果是
> Capricorn
> Aquarius
> Cancer
> Pices
> test=  ['Capricorn', 'Aquarius', 'Cancer', 'Pices']
>
> On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
> > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > > > 用如下代码,
> > > > > > >         >>> t=BinaryTree('Capricorn')
> > > > > > >         >>> t.addNode('Aquarius')
> > > > > > >         >>> t.addNode('Pices')
> > > > > > >         >>> t.addNode('Cancer')
> > > > > > >         >>> t.printTree()
> > > > > > >         Capricorn
> > > > > > >         Aquarius
> > > > > > >         Cancer
> > > > > > >         Pices
> > > > > > >
> > > > > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > > > > >
> > > > > > > class BinaryTree:
> > > > > > >
> > > > > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > > > > >       self.key = key
> > > > > > >       self.left = left
> > > > > > >       self.right = right
> > > > > > >       self.parent = parent
> > > > > > >
> > > > > > >   def addNode(self,key):
> > > > > > >       """Add a node in the proper location."""
> > > > > > >       if key < self.key:
> > > > > > >           if self.left:
> > > > > > >               self.left.addNode(key)
> > > > > > >           else:
> > > > > > >               self.left = BinaryTree(key, parent=self)
> > > > > > >       elif key > self.key:
> > > > > > >           if self.right:
> > > > > > >               self.right.addNode(key)
> > > > > > >           else:
> > > > > > >               self.right = BinaryTree(key, parent=self)
> > > > > > >
> > > > > > >     def printTree(self):
> > > > > > >         print self.key
> > > > > > >         if self.left:
> > > > > > >             self.left.printTree()
> > > > > > >         if self.right:
> > > > > > >             self.right.printTree()
> > > > > > >
> > > > > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> > > > >
> > > > > 试过,结果只给了我第一个值'Capricorn'
> > > > >     def tree2list(self):
> > > > >         b=[]
> > > > >         b.append(self.key)
> > > > >         if self.left:
> > > > >             self.left.tree2list()
> > > > >         if self.right:
> > > > >             self.right.tree2list()
> > > > >         return b
> > > > >
> > > > 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。
> > >
> > > 我还是不明白.新手上路,多多原谅.
> > >
> > 我做了这些改动:
> > 加了self.list= [],
> >    def __init__(self, key, left=None, right=None, parent=None):
> >        self.key = key
> >        self.left = left
> >        self.right = right
> >        self.parent = parent
> >        self.list= []
> >    def tree2list(self):
> >        self.list.append(self.key)
> >        if self.left:
> >            self.left.tree2list()
> >        if self.right:
> >            self.right.tree2list()
> >        return self.list
> > 但是结果还是一样,只给了我第一个值'Capricorn'.
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 14:38

lubiao lubiao.py at gmail.com
Wed Jul 12 14:38:46 HKT 2006

On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
>
> 有什么办法把
> test = [item for item in t.tree2list()]
> 能直接放进类里,也就是,
> t.tree2list()直接就给['Capricorn', 'Aquarius', 'Cancer', 'Pices']



class BinaryTree:
  def __init__(self, key, left=None, right=None, parent=None):
    self.key = key
    self.left = left
    self.right = right
    self.parent = parent

  def addNode(self,key):
    """Add a node in the proper location."""
    if key < self.key:
      if self.left:
         self.left.addNode(key)
      else:
         self.left = BinaryTree(key, parent=self)
    elif key > self.key:
      if self.right:
         self.right.addNode(key)
      else:
         self.right = BinaryTree(key, parent=self)

  def printTree(self):
    print self.key
    if self.left:
      self.left.printTree()
    if self.right:
      self.right.printTree()

  def createKeyList(self, outLs):
    outLs.append(self.key)
    if self.left:
      self.left.createKeyList(outLs)
    if self.right:
      self.right.createKeyList(outLs)

  def printKeyList(self):
    ls = []
    self.createKeyList(ls)
    print ls

if __name__ == '__main__':
   t=BinaryTree('Capricorn')
   t.addNode('Aquarius')
   t.addNode('Pices')
   t.addNode('Cancer')
   t.printTree()
   ls = []
   t.createKeyList(ls)
   print ls


   t.printKeyList()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060712/91b0db9a/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 17:27

imcs ee imcsee at gmail.com
Wed Jul 12 17:27:23 HKT 2006

把原来的
    def tree2list(self):
        yield self.key
        if self.left:
            for foo in self.left.tree2list():
                yield foo
        if self.right:
            for foo in self.right.tree2list():
                yield foo
换为
    def tree2list(self):
        return [item for item in self.tree2yield()]
    def tree2yield(self):
        yield self.key
        if self.left:
            for foo in self.left.tree2list():
                yield foo
        if self.right:
            for foo in self.right.tree2list():
                yield foo
就可以了吧...
On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
> 有什么办法把
> test = [item for item in t.tree2list()]
> 能直接放进类里,也就是,
> t.tree2list()直接就给['Capricorn', 'Aquarius', 'Cancer', 'Pices']
>
> On 7/11/06, imcs ee <imcsee at gmail.com> wrote:
> > 看了你最后的这个代码,是不是四个值分别被return,但是只有最后一次return的Capricorn返回给了调用函数。
> > 如果把ruturn改成yield,应该就差不多了吧。
> > 我写的tree2list函数是
> >    def tree2list(self):
> >        yield self.key
> >        if self.left:
> >            for foo in self.left.tree2list():
> >                yield foo
> >        if self.right:
> >            for foo in self.right.tree2list():
> >                yield foo
> > 调用代码是
> > test = [item for item in t.tree2list()]
> > python的缩进,好像在邮件列表里面有问题啊...我把代码放在附件里面了。
> > 运行结果是
> > Capricorn
> > Aquarius
> > Cancer
> > Pices
> > test=  ['Capricorn', 'Aquarius', 'Cancer', 'Pices']
> >
> > On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > > > > 用如下代码,
> > > > > > > >         >>> t=BinaryTree('Capricorn')
> > > > > > > >         >>> t.addNode('Aquarius')
> > > > > > > >         >>> t.addNode('Pices')
> > > > > > > >         >>> t.addNode('Cancer')
> > > > > > > >         >>> t.printTree()
> > > > > > > >         Capricorn
> > > > > > > >         Aquarius
> > > > > > > >         Cancer
> > > > > > > >         Pices
> > > > > > > >
> > > > > > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > > > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > > > > > >
> > > > > > > > class BinaryTree:
> > > > > > > >
> > > > > > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > > > > > >       self.key = key
> > > > > > > >       self.left = left
> > > > > > > >       self.right = right
> > > > > > > >       self.parent = parent
> > > > > > > >
> > > > > > > >   def addNode(self,key):
> > > > > > > >       """Add a node in the proper location."""
> > > > > > > >       if key < self.key:
> > > > > > > >           if self.left:
> > > > > > > >               self.left.addNode(key)
> > > > > > > >           else:
> > > > > > > >               self.left = BinaryTree(key, parent=self)
> > > > > > > >       elif key > self.key:
> > > > > > > >           if self.right:
> > > > > > > >               self.right.addNode(key)
> > > > > > > >           else:
> > > > > > > >               self.right = BinaryTree(key, parent=self)
> > > > > > > >
> > > > > > > >     def printTree(self):
> > > > > > > >         print self.key
> > > > > > > >         if self.left:
> > > > > > > >             self.left.printTree()
> > > > > > > >         if self.right:
> > > > > > > >             self.right.printTree()
> > > > > > > >
> > > > > > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> > > > > >
> > > > > > 试过,结果只给了我第一个值'Capricorn'
> > > > > >     def tree2list(self):
> > > > > >         b=[]
> > > > > >         b.append(self.key)
> > > > > >         if self.left:
> > > > > >             self.left.tree2list()
> > > > > >         if self.right:
> > > > > >             self.right.tree2list()
> > > > > >         return b
> > > > > >
> > > > > 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。
> > > >
> > > > 我还是不明白.新手上路,多多原谅.
> > > >
> > > 我做了这些改动:
> > > 加了self.list= [],
> > >    def __init__(self, key, left=None, right=None, parent=None):
> > >        self.key = key
> > >        self.left = left
> > >        self.right = right
> > >        self.parent = parent
> > >        self.list= []
> > >    def tree2list(self):
> > >        self.list.append(self.key)
> > >        if self.left:
> > >            self.left.tree2list()
> > >        if self.right:
> > >            self.right.tree2list()
> > >        return self.list
> > > 但是结果还是一样,只给了我第一个值'Capricorn'.
> > >
> > > _______________________________________________
> > > python-chinese
> > > Post: send python-chinese at lists.python.cn
> > > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> > >
> > >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
#!/usr/bin/env python
class BinaryTree:
    def __init__(self, key, left=None, right=None, parent=None):
        self.key = key
        self.left = left
        self.right = right
        self.parent = parent
    def addNode(self,key):
        """Add a node in the proper location."""
        if key < self.key:
            if self.left:
                self.left.addNode(key)
            else:
                self.left = BinaryTree(key, parent=self)
        elif key > self.key:
            if self.right:
                self.right.addNode(key)
            else:
                self.right = BinaryTree(key, parent=self)

    def printTree(self):
        print self.key
        if self.left:
            self.left.printTree()
        if self.right:
            self.right.printTree()
    def tree2list(self):
        return [item for item in self.tree2yield()]
    def tree2yield(self):
        yield self.key
        if self.left:
            for foo in self.left.tree2list():
                yield foo
        if self.right:
            for foo in self.right.tree2list():
                yield foo
def main():
    t=BinaryTree('Capricorn')
    t.addNode('Aquarius')
    t.addNode('Pices')
    t.addNode('Cancer')
    t.printTree()
    test = t.tree2list()
    print 'test= ', test        
if __name__ == "__main__":
    main()


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年07月12日 星期三 22:24

linda.s samrobertsmith at gmail.com
Wed Jul 12 22:24:22 HKT 2006

我想把
[11, 12, 13, 14, 15, 16, 17, 18, 19]
变成
[15,12,17,11,13,16,18,14,19];
也就是每一次取中值,左右再取中值,一直到取完.
不知道怎么样和原来邮件里的tree结合起来?

On 7/11/06, imcs ee <imcsee at gmail.com> wrote:
> 看了你最后的这个代码,是不是四个值分别被return,但是只有最后一次return的Capricorn返回给了调用函数。
> 如果把ruturn改成yield,应该就差不多了吧。
> 我写的tree2list函数是
>    def tree2list(self):
>        yield self.key
>        if self.left:
>            for foo in self.left.tree2list():
>                yield foo
>        if self.right:
>            for foo in self.right.tree2list():
>                yield foo
> 调用代码是
> test = [item for item in t.tree2list()]
> python的缩进,好像在邮件列表里面有问题啊...我把代码放在附件里面了。
> 运行结果是
> Capricorn
> Aquarius
> Cancer
> Pices
> test=  ['Capricorn', 'Aquarius', 'Cancer', 'Pices']
>
> On 7/12/06, linda. s <samrobertsmith at gmail.com> wrote:
> > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > On 7/11/06, limodou <limodou at gmail.com> wrote:
> > > > > > On 7/11/06, linda. s <samrobertsmith at gmail.com> wrote:
> > > > > > > 用如下代码,
> > > > > > >         >>> t=BinaryTree('Capricorn')
> > > > > > >         >>> t.addNode('Aquarius')
> > > > > > >         >>> t.addNode('Pices')
> > > > > > >         >>> t.addNode('Cancer')
> > > > > > >         >>> t.printTree()
> > > > > > >         Capricorn
> > > > > > >         Aquarius
> > > > > > >         Cancer
> > > > > > >         Pices
> > > > > > >
> > > > > > > 有什么办法把 printTree 里的print 转化为list吗?
> > > > > > > 也就是:['Capricorn','Aquarius','Cancer','Pices']
> > > > > > >
> > > > > > > class BinaryTree:
> > > > > > >
> > > > > > >   def __init__(self, key, left=None, right=None, parent=None):
> > > > > > >       self.key = key
> > > > > > >       self.left = left
> > > > > > >       self.right = right
> > > > > > >       self.parent = parent
> > > > > > >
> > > > > > >   def addNode(self,key):
> > > > > > >       """Add a node in the proper location."""
> > > > > > >       if key < self.key:
> > > > > > >           if self.left:
> > > > > > >               self.left.addNode(key)
> > > > > > >           else:
> > > > > > >               self.left = BinaryTree(key, parent=self)
> > > > > > >       elif key > self.key:
> > > > > > >           if self.right:
> > > > > > >               self.right.addNode(key)
> > > > > > >           else:
> > > > > > >               self.right = BinaryTree(key, parent=self)
> > > > > > >
> > > > > > >     def printTree(self):
> > > > > > >         print self.key
> > > > > > >         if self.left:
> > > > > > >             self.left.printTree()
> > > > > > >         if self.right:
> > > > > > >             self.right.printTree()
> > > > > > >
> > > > > > 把printTree改造一下不就行了嘛,既然可以打印,那就可以保存啊
> > > > >
> > > > > 试过,结果只给了我第一个值'Capricorn'
> > > > >     def tree2list(self):
> > > > >         b=[]
> > > > >         b.append(self.key)
> > > > >         if self.left:
> > > > >             self.left.tree2list()
> > > > >         if self.right:
> > > > >             self.right.tree2list()
> > > > >         return b
> > > > >
> > > > 把b设成一个实例变量即可,你这样每次调用都会生成一个新的变量,因此只能存住一个值。
> > >
> > > 我还是不明白.新手上路,多多原谅.
> > >
> > 我做了这些改动:
> > 加了self.list= [],
> >    def __init__(self, key, left=None, right=None, parent=None):
> >        self.key = key
> >        self.left = left
> >        self.right = right
> >        self.parent = parent
> >        self.list= []
> >    def tree2list(self):
> >        self.list.append(self.key)
> >        if self.left:
> >            self.left.tree2list()
> >        if self.right:
> >            self.right.tree2list()
> >        return self.list
> > 但是结果还是一样,只给了我第一个值'Capricorn'.
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号