亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個簡單的 ArrayRotation 代碼輸出錯誤?

這個簡單的 ArrayRotation 代碼輸出錯誤?

繁花不似錦 2023-09-19 14:04:50
為左數組旋轉編寫了一個簡單的代碼,得到了相同的數組,但沒有對其進行任何旋轉,作為錯誤的輸出。def leftRotate(arr, d, n):    while (d-1) > 0:        leftRotatebyOne(arr, n)def leftRotatebyOne(arr, n):    temp = arr[0]    for i in range(n-1):        arr[i] = arr[i + 1]    arr[n - 1] = tempdef PrintArray(arr, size):    for i in range(size):        print("%d" % arr[i], end=" ")arr = []l = int(input("Enter the number of elements: "))for i in range(0, l):    ele = int(input())    arr.append(ele)d = int(input("Enter the number of rotations: "))n = len(arr)leftRotate(arr, d, n)PrintArray(arr, n)這是我得到的輸出的示例,Enter the number of elements: 3123Enter the number of rotations: 11 2 3我預計旋轉一圈后輸出為 2 3 1。
查看完整描述

3 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

我建議使用數組切片,然后將切片添加在一起,以執行旋轉。


def left_rotate(data, num):

    return data[num:] + data[:num]


def right_rotate(data, num):

    return data[-num:] + data[:-num]

例如


>>> a = [1,2,3,4,5,6,7]

>>> left_rotate(a, 2)

[3, 4, 5, 6, 7, 1, 2]

>>> right_rotate(a, 2)

[6, 7, 1, 2, 3, 4, 5]

另請注意,collections.deque此行為已經可用


>>> from collections import deque

>>> d = deque([1,2,3,4,5,6,7])

>>> d.rotate(2)

>>> d

deque([6, 7, 1, 2, 3, 4, 5])

>>> d.rotate(-2)

>>> d

deque([1, 2, 3, 4, 5, 6, 7])


查看完整回答
反對 回復 2023-09-19
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

在函數 leftRotate 中,

while 循環中有錯誤。

代替

while (d-1) > 0:
    leftRotatebyOne(arr, n)

while d > 0:
    leftRotatebyOne(arr, n)
    d -= 1


查看完整回答
反對 回復 2023-09-19
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

當 時d == 1,while (d-1) > 0:任何時候都不會被執行。而且,你永遠不會減少 d。最簡單的解決方法是使用循環for _ in range(d):


def leftRotate(arr, d, n):

    for _ in range(d):

        leftRotatebyOne(arr, n)

注意: Python 有比這更好的旋轉方法。這段代碼看起來更像C而不是Python。例如,在 Python 中傳遞數組長度是沒有意義的。并且輪換可以在一次分配中完成。


def leftRotate(arr, d):

    d %= len(arr)

    for _ in range(d):

        arr[-1], arr[:-1] = arr[0], arr[1:]

科里·克萊默 (Cory Kramer) 的回答更加Python化。但它有一個錯誤,并且與你的問題的方法有所不同。錯誤在于,當請求的旋轉次數高于列表的長度時,它不起作用。不同之處在于他們返回一個新列表而不是修改它。這兩個問題可以這樣解決:


def left_rotate(data, num):

    num %= len(data)

    data[:] = data[num:] + data[:num]


def right_rotate(data, num):

    num %= len(data)

    data[:] = data[-num:] + data[:-num]


查看完整回答
反對 回復 2023-09-19
  • 3 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號