我无法在网上找到这个问题的好解决方案(可能因为交换机,位置,列表和Python都是这样的重载词).
这很简单 - 我有这个清单:
['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
Run Code Online (Sandbox Code Playgroud)
我想切换的位置'password2'和'password1'-不知道他们的确切位置,只知道他们是对彼此相邻并password2是第一.
我用一些相当冗长的列表下标来完成这个,但我想知道它可能会提出一些更优雅的东西吗?
众所周知,pythonic 的方式来交换两个项目的值,a并且b是
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
它应该相当于
b, a = a, b
Run Code Online (Sandbox Code Playgroud)
但是,今天在写代码的时候,无意中发现下面的两个swap给出了不同的结果:
nums = [1, 2, 4, 3]
i = 2
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
print(nums)
# [1, 2, 4, 3]
nums = [1, 2, 4, 3]
i = 2
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
print(nums)
# [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
这对我来说令人难以置信。有人可以向我解释这里发生了什么吗?我认为在 Python 交换中,这两个任务同时且独立地发生。
现在我知道在迭代循环期间修改列表是不安全的.但是,假设我有一个字符串列表,我想自己去除字符串.替换可变值是否算作修改?