Python链接列表

问题:

在python中使用链表的最简单的方法是什么?在方案中,链表仅由'(1 2 3 4 5)定义。 Python的列表[1, 2, 3, 4, 5]和元组(1, 2, 3, 4, 5)实际上不是链接列表,链接列表具有一些不错的属性,例如定时连接,并且可以引用它们的单独部分。使它们不变,他们真的很容易合作!

回答:

这里有一些基于Martin v. Löwis’s representation的列表功能

cons   = lambda el, lst: (el, lst)
mklist = lambda *args: reduce(lambda lst, el: cons(el, lst), reversed(args), None)
car = lambda lst: lst[0] if lst else lst
cdr = lambda lst: lst[1] if lst else lst
nth = lambda n, lst: nth(n-1, cdr(lst)) if n > 0 else car(lst)
length  = lambda lst, count=0: length(cdr(lst), count+1) if lst else count
begin   = lambda *args: args[-1]
display = lambda lst: begin(w("%s " % car(lst)), display(cdr(lst))) if lst else w("nil\n")

其中w = sys.stdout.write
尽管双重链表在Raymond Hettinger的ordered set recipe中着名使用,但单链表在Python中没有实际价值。
除了教育,我never在Python中使用了一个单链接列表。
Thomas Watnedal suggested一个很好的教育资源How to Think Like a Computer Scientist, Chapter 17: Linked lists
链表是:

  • 空列表,由None表示,或
  • 包含货物对象和对链表的引用的节点。
      class Node:
      def __init __(self,cargo = None,next = None):
        self.car =货物
        self.cdr = next
      def __str __(self):
        返回str(self.car)

    def显示(lst):
      如果lst:
        w(“%s”%lst)
        显示器(lst.cdr)
      其他:
        瓦特( “无\ n” 个)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python Linked List

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

37 − = 27