Функция не может преобразовать элемент списка, если заключена в функцию for - PullRequest
0 голосов
/ 21 июня 2019

Может ли кто-нибудь объяснить поведение следующего кода?

import random


abc = ['a', 'b', 'c']
xyz = ['x', 'y', 'z']


def randomize(x):
    random.shuffle(x)
    x = x[0]
    print('expected: ' + str(x))
    return x


random_list = [abc, xyz]

for r in random_list:
    r = randomize(x=r)


print('-----\n')

print('actual: ' + str(abc))
print('actual: ' + str(xyz))

Если я запускаю код вне цикла for, он будет работать так, как ожидается:

abc = randomize(abc)
print('actual: ' + str(abc))

Я ожидаюоднако возвращаемое значение совпадает с тем, что печатается в функции, но это не так.

1 Ответ

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

Итак, мы начинаем с random_list = [abc, xyz]

for r in random_list:

На данный момент r относится к списку abc.

    r = randomize(x=r)

r теперь указывает нановый объект, возвращаемый из randomize, отличающийся от того, на что указывает abc.

Один обходной путь -

for i in len(random_list):
    random_list[i] = randomize(random_list[i])

или

random_list = [randomize(r) for element in random_list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...