使用嵌套列表索引时,Pythonic swap会导致索引错误

时间:2018-05-31 19:17:04

标签: python list swap

我知道pythonic交换可以写成:

And Section.ID_section Equals (ID_Section)  

但在我的问题中,我想交换列表中的元素,但我使用的索引是原始列表中某个索引位置的值。它的工作原理如下:

如果我有一个列表nums要交换,我有一个索引i。

Declare @ID_Section int
SELECT        Book.ID_Book, Book.Name_Book, Section.ID_section, Section.Name_Section
FROM            Book LEFT OUTER JOIN
                         Section ON Book.ID_Section = Section.ID_section and Section.ID_section = @ID_Section
where Book.ID_Book =1

在这里我们可以假设

a,b = b,a
list[a], list[b] = list[b], list[a]

交换后我期待的是:

nums = [-10,-3,-100,-1000,-239,1]  # list to swap
i = 5  # index

以下命令给我索引超出范围错误:

if nums[i] > 0 and nums[i]<=len(nums)

虽然以下命令正常工作:

[1, -3, -100, -1000, -239, -10]

我很困惑,请让我知道我哪里错了。

1 个答案:

答案 0 :(得分:2)

这是因为在Python中交换两个变量的工作原理。

注意即使你得到AssignmentError,如果你之后打印出你的清单,

>>> nums
[-10, -3, -100, -1000, -239, -10]

这是因为在

的右侧创建了元组
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
解压缩

并将其分配到左侧,在拆包期间评估左侧。

所以

  • 使用值(-10, 1)
  • 创建RHS元组
  • nums[i]被指定为-10
  • 然后您尝试将nums[nums[i]-1]指定为1 ...但由于nums[i]此时已评估,现在为-10, index现在为-11,给出错误。