【问题标题】:attribute error using linked lists in python在python中使用链表的属性错误
【发布时间】:2015-02-23 18:42:16
【问题描述】:

我是 python 新手,正在尝试模拟链表的工作原理。我有以下代码:

def mystery(x):
  a , b = x , x.next.next
  while b.next != None:
    a.next.next = b.next
    b.next = a.next
    a.next = b
    a = b
    b = b.next.next

但是当我给它列表 'x' 即 x = ['1','2','3','4', '5'] 时,我收到以下错误:

  File "D:\workspace33\Quizes\src\tests.py", line 3, in mystery
a , b = x , x.next.next
AttributeError: 'list' object has no attribute 'next'

我试图在Online Python Tutor 上模拟/可视化程序 但我一直收到同样的错误。谁能让我知道做错了什么或帮助我理解这个过程。

【问题讨论】:

  • 为什么你认为列表有next 属性? (他们没有)
  • Python 列表,例如您的x = ['1','2','3','4', '5'],不是链表。
  • @TimCastelijns- 谢谢,我将如何使用该程序?
  • @BoJaNgLeS:我建议您谷歌“Python 链表”以获取有关在 Python 中实现链表的大量信息。 (这不是该语言的原生特性;您必须自己动手。)

标签: python-3.x linked-list


【解决方案1】:

如果.next[1] 替换,则可以使用python 列表来实现链接列表。这是您的程序如此转换的示例。

def mystery(x):
  a , b = x, x[1][1]
  while b[1] != None:
    a[1][1] = b[1]
    b[1] = a[1]
    a[1] = b
    a = b
    b = b[1][1]
  return a, b

ll = [0, [1, [2, [3, None]]]]
print(mystery(ll))
# ([2, [1, [3, None]]], [3, None])

如果您愿意,您可以通过打开调试器(在 Shell 窗口中)在 Idle 中单步执行该程序,然后再从编辑器窗口运行它。到达打印行时,单击 [over] 而不是 [step](或禁用打印)。

【讨论】:

  • @TerryJanReedy- 这个程序做的事情和原来的完全一样吗?
  • 就如何访问和操作链接而言,是的。我在神秘功能中做了指示的查找/替换。如果你编写一个 LL 类并创建一个等价的输入,你应该得到一个等价的输出。
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 2015-02-03
  • 2013-10-20
  • 2011-12-16
  • 2021-07-18
  • 2014-03-21
  • 2013-07-01
  • 2011-10-12
相关资源
最近更新 更多