如果包装在for函数中,则函数无法转换列表元素

时间:2019-06-21 16:52:20

标签: python list function random

有人可以解释以下代码的行为吗?

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 个答案:

答案 0 :(得分:1)

所以我们从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]