[英]Rotate array in Python
Leetcode上有這個問題,189 Rotate array。 在此處輸入鏈接描述它的語句是“給定一個數組,將數組向右旋轉 k 步,其中 k 是非負數。” 為了更好地理解它,這里有一個例子。 在此處輸入圖像描述
所以,我的代碼是
for _ in range(k):
j = nums[-1]
nums.remove(nums[-1])
nums.insert(0, j)
它不能通過其中的一些測試用例。 在討論面板中,我發現了一個聲稱它已成功提交的代碼,就像
for _ in range(k):
nums.insert(0, nums.pop(-1))
我想知道,這兩者之間有什么區別以及為什么我的代碼無法通過某些測試用例。
如果您在 python shell [].remove.__doc__
上執行此操作,您將看到list.remove
的目的是:
刪除第一次出現的值。 如果值不存在,則引發 ValueError。
在您的代碼nums.remove(nums[-1])
不會刪除最后一項,而是第一次出現最后一項的值。
例如
如果您有一個值為nums = [2, 4, 8, 3, 4]
的列表,並且如果您執行nums.remove(nums[-1])
,則nums
的內容變為[2, 8, 3, 4]
而不是[2, 4, 8, 3]
你所期待的。
只需使用切片:
>>> def rotate(l, n):
... return l[-n:] + l[:-n]
...
>>> lst = [1, 2, 3, 4, 5, 6, 7]
>>> rotate(lst, 1)
[7, 1, 2, 3, 4, 5, 6]
>>> rotate(lst, 2)
[6, 7, 1, 2, 3, 4, 5]
>>> rotate(lst, 3)
[5, 6, 7, 1, 2, 3, 4]
cesarv給出的答案既好又簡單,但是在大型 arrays numpy 上肯定會表現更好。 考慮:
np.roll(lst, n)
在您的代碼中 j = nums[-1] 並且您正在嘗試插入(0,nums[-1])。
在
for _ in range(k):
nums.insert(0, nums.pop(-1))
插入其他數字 - (0, nums.pop(-1))
remove()
方法將單個元素作為參數,並從列表中刪除它的第一次出現。
pop()
方法采用單個參數(索引)。 傳遞給該方法的參數是可選的。 如果未傳遞,則默認索引 -1 作為參數(最后一項的索引)傳遞。
如果測試用例在最后一個索引之前有相同的項目,那么測試用例將失敗。
因此,要更正您的代碼,請用pop
替換remove
for _ in range(k):
poppedElement = nums.pop()
nums.insert(0, poppedElement)
或者讓它更簡潔——
for _ in range(k):
nums.insert(0, nums.pop())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.