Может кто-нибудь увидеть, что не так с моим кодом (вращение ARRAY)? - PullRequest
0 голосов
/ 13 июня 2019

Я уверен, что ошибка в функции поворота, но я не могу найти, что это.код в python3

def rotate(arr, n):
    x = arr[n - 1]
    b = list()
    b.append(x)
    for i in range(0,len(arr) - 1):
        b.append(arr[i]);

    arr = b

a = [1,3,4,5,5,7,8,9]


print('array before is: ',a)
n=len(a)
rotate(a, n)




print('array after rotation: ',a)

Редактировать: я просто хочу знать, что не так с существующим кодом.Пожалуйста, не предлагайте альтернативного решения.

Ответы [ 3 ]

1 голос
/ 13 июня 2019
def rotate(arr, n):
    return arr[n:] + arr[:n]

Чтобы получить [9, 1, 3, 4, 5, 5, 7, 8] из a = [1, 3, 4, 5, 5, 7, 8, 9],

вам нужно сделать rotate(a, len(a) - 1).

1 голос
/ 13 июня 2019

Ну, одна проблема здесь:

обр = b

Вы назначаете локальную переменную здесь. Это не будет иметь никакого эффекта. Замените это на return b И используйте так:

print('array after rotation: ', rotate(a,n))

Возможно, больше проблем, но это первое, что бросается в глаза.

0 голосов
/ 13 июня 2019

Линия:

def rotate(arr, n):
    # ...
    <b>arr = b</b>

не делает много. arr - локальная переменная, поэтому присвоение ей другого значения не влияет на переменную, с которой вы ее вызвали. Python не выполняет вызов по ссылке , он выполняет вызов по значению . Если объект является изменяемым, вы можете изменить состояние этого объекта, но вы не можете изменить ссылку на переменную, указывающую на этот объект (или, по крайней мере, без некоторых хитростей).

Самый элегантный способ решить эту проблему, вероятно, вернуть новый объект и установить его на уровне вызывающего:

def rotate(arr, n):
    return arr[n:] + arr[:n]

и позвоните, как:

arr = rotate(arr, len(n)-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...