为什么我在 python 中使用 x,y = y,x 超出范围
Why I am out of range by using x,y = y,x in python
请求是轮换列表。当K=3时,你把[1,2,3,4,5,6,7]变成[5,6,7,1,2,3,4];当K=1时,你把[1,2,3,4,5,6,7]变成[7,1,2,3,4,5,6]
为什么我超出了范围?
PyCharm
这样通知我:IndexError
:列表索引超出范围
class Solution:
def rotate(self, nums, k) -> None:
k = k%len(nums)
def rev(x, y, num):
while y > x:
num[x], num[y] = num[y], num[x]
x += 1
y -= 1
rev(0, len(nums), nums)
rev(0, k-1,nums)
rev(k, len(nums), nums)
nums = [1,2,3,4,5,6,7]
s = Solution()
s.rotate(nums,3)
由于索引从 0
开始到 len(list)-1
结束,因此您有一个错误。你这样调用 rev
:
rev(0, len(nums), nums)
正确的是:
rev(0, len(nums)-1, nums)
此外,由于在python中可以添加带有负索引的列表和索引列表,您也可以这样解决问题:
nums = [1,2,3,4,5,6,7]
def rotate_list(list_to_rotate, k):
return list_to_rotate[-k:] + list_to_rotate[:-k]
rotate_list(nums, 3)
# output: [5, 6, 7, 1, 2, 3, 4]
您收到索引超出范围错误,因为您试图访问列表中不存在的索引。
通常,您的列表 nums
有 7 个元素,这意味着您可以 nums[i]
如果 0<=i<=6.
要修复您的代码,您只需将 rev(0, len(nums), nums)
替换为 rev(0, len(nums)-1, nums)
class Solution:
def rotate(self, nums, k) -> None:
k = k % len(nums)
def rev(x, y, num):
while y > x:
num[x], num[y] = num[y], num[x]
x += 1
y -= 1
rev(0, len(nums)-1, nums)
rev(0, k - 1, nums)
rev(k, len(nums)-1, nums)
nums = [1, 2, 3, 4, 5, 6, 7]
s = Solution()
s.rotate(nums, 3)
或者,您可以使用这个更简单的实现,其中 returns 另一个列表:
class Solution:
def rotate(self, nums, k) -> list:
k = k % len(nums)
return nums[-k:] + nums[:-k]
nums = [1, 2, 3, 4, 5, 6, 7]
s = Solution()
nums = s.rotate(nums, 3)
请求是轮换列表。当K=3时,你把[1,2,3,4,5,6,7]变成[5,6,7,1,2,3,4];当K=1时,你把[1,2,3,4,5,6,7]变成[7,1,2,3,4,5,6]
为什么我超出了范围?
PyCharm
这样通知我:IndexError
:列表索引超出范围
class Solution:
def rotate(self, nums, k) -> None:
k = k%len(nums)
def rev(x, y, num):
while y > x:
num[x], num[y] = num[y], num[x]
x += 1
y -= 1
rev(0, len(nums), nums)
rev(0, k-1,nums)
rev(k, len(nums), nums)
nums = [1,2,3,4,5,6,7]
s = Solution()
s.rotate(nums,3)
由于索引从 0
开始到 len(list)-1
结束,因此您有一个错误。你这样调用 rev
:
rev(0, len(nums), nums)
正确的是:
rev(0, len(nums)-1, nums)
此外,由于在python中可以添加带有负索引的列表和索引列表,您也可以这样解决问题:
nums = [1,2,3,4,5,6,7]
def rotate_list(list_to_rotate, k):
return list_to_rotate[-k:] + list_to_rotate[:-k]
rotate_list(nums, 3)
# output: [5, 6, 7, 1, 2, 3, 4]
您收到索引超出范围错误,因为您试图访问列表中不存在的索引。
通常,您的列表 nums
有 7 个元素,这意味着您可以 nums[i]
如果 0<=i<=6.
要修复您的代码,您只需将 rev(0, len(nums), nums)
替换为 rev(0, len(nums)-1, nums)
class Solution:
def rotate(self, nums, k) -> None:
k = k % len(nums)
def rev(x, y, num):
while y > x:
num[x], num[y] = num[y], num[x]
x += 1
y -= 1
rev(0, len(nums)-1, nums)
rev(0, k - 1, nums)
rev(k, len(nums)-1, nums)
nums = [1, 2, 3, 4, 5, 6, 7]
s = Solution()
s.rotate(nums, 3)
或者,您可以使用这个更简单的实现,其中 returns 另一个列表:
class Solution:
def rotate(self, nums, k) -> list:
k = k % len(nums)
return nums[-k:] + nums[:-k]
nums = [1, 2, 3, 4, 5, 6, 7]
s = Solution()
nums = s.rotate(nums, 3)