Cod*_*755 4 python swap python-3.x
这涉及到我在尝试解决链表反向问题时遇到的一个问题。
首先放一些链表定义和生成链表的快速方法的初步代码:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self.next:
return "{}->{}".format(self.val, repr(self.next))
else:
return "{}".format(self.val)
def genNode(*nodes, end=None):
if len(nodes) == 1 and type(nodes[0]) == list:
nodes = nodes[0]
for i in nodes[::-1]:
n = ListNode(i)
n.next, end = end, n
return n if nodes else None
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我发现交换机制仍然取决于我编写的变量的顺序。
最初,当我们谈论 python 中的交换值时,我们可以这样做:
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
如果我有的话,它应该以同样的方式工作
b, a = a, b
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写的这个反向链表方法有3个变量交换,想法很简单,创建一个虚拟头,并在dummy和dummy.next之间不断添加节点,这样就可以反转。
def rev(head):
dummy = ListNode('X')
while head:
dummy.next, head.next, head = head, dummy.next, head.next
return dummy.next
a = genNode(1,2,3,4)
print(rev(a)) # >>> 4->3->2->1
Run Code Online (Sandbox Code Playgroud)
但是如果我稍微改变三个变量的顺序:
def rev2(head):
dummy = ListNode('X')
while head:
dummy.next, head, head.next, = head, head.next, dummy.next,
return dummy.next
a = genNode(1,2,3,4)
print(rev2(a)) # >>> AttributeError: 'NoneType' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)
所以看起来顺序在这里很重要,任何人都可以让我知道如果有两个以上的变量,python 如何评估交换值。
谢谢!
左到右
\n\n看看https://docs.python.org/3/reference/simple_stmts.html#assignment-statements
\n\nCPython 实现细节:在当前实现中,目标的语法与表达式的语法相同,并且在代码生成阶段拒绝无效语法,从而导致不太详细的错误消息。
\n\n尽管赋值的定义意味着左侧和右侧之间的重叠是 \xe2\x80\x98simultaneous\xe2\x80\x99 (例如 a, b = b,a 交换两个变量),但内部重叠分配给变量的集合从左到右出现,有时会导致混乱。例如,以下程序打印 [0, 2]:
\n\nx = [0, 1]\ni = 0\ni, x[i] = 1, 2 # i is updated, then x[i] is updated\nprint(x)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |