首页 / PYTHON / python交换和赋值
python交换和赋值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python交换和赋值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1102字,纯文字阅读大概需要2分钟。
内容图文
通常,我们使用A [i],A [j] = A [j],A [i]来交换.
这有时可能无效.例如,
A=[1, 2]
A[0], A[A[0]] = A[A[0]], A[0]
将失败.为什么会失败以及如何解释赋值?
解决方法:
让我们看看有问题的语句的字节码:
>>> def f(A):
... A[0], A[A[0]] = A[A[0]], A[0]
...
>>> dis.dis(f)
2 0 LOAD_FAST 0 (A)
3 LOAD_FAST 0 (A)
6 LOAD_CONST 1 (0)
9 BINARY_SUBSCR
10 BINARY_SUBSCR
11 LOAD_FAST 0 (A)
14 LOAD_CONST 1 (0)
17 BINARY_SUBSCR
18 ROT_TWO
19 LOAD_FAST 0 (A)
22 LOAD_CONST 1 (0)
25 STORE_SUBSCR
26 LOAD_FAST 0 (A)
29 LOAD_FAST 0 (A)
32 LOAD_CONST 1 (0)
35 BINARY_SUBSCR
36 STORE_SUBSCR
37 LOAD_CONST 0 (None)
40 RETURN_VALUE
这样工作如下:
>指令0-10在值堆栈上按A [A [0]],因此为2
>指令11-17在值堆栈上按A [0],现在为2,1
>指令18交换它们,堆栈为1,2
>指令19-25将最高值(2)分配给A [0],将值堆栈保留为1
>指令26-36尝试为A [A [0]]赋值,但A [0]现在为2,所以它试图分配给A [2],这是一个IndexError.
简而言之,问题是在分配给A [0]之后才评估左侧的A [A [0]].
作为修复,我建议:
A0 = A[0]
A[0], A[A0] = A[A0], A[0]
内容总结
以上是互联网集市为您收集整理的python交换和赋值全部内容,希望文章能够帮你解决python交换和赋值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。