我知道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]
我很困惑,请让我知道我哪里错了。
答案 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)
nums[i]
被指定为-10 nums[nums[i]-1]
指定为1
...但由于nums[i]
此时已评估,现在为-10, index现在为-11,给出错误。