在与另一个列表关联的列表上使用shuffle方法将它们两者混洗?

时间:2016-11-09 21:31:53

标签: python list random shuffle

这是我的代码

import random

#Creating a list
li1=[1,2,3,4,5,6,7,8,9]

#Creating a copy of li1 to li2
li2=li1

random.shuffle(li1)

print (li2)

这也会改变li2,为什么?有没有办法让他们独立洗牌?

我该如何解决这个问题?非常感谢你!

2 个答案:

答案 0 :(得分:0)

当您执行li2 = li1时,您不会将li1的副本,而是li1列表的引用存储到li2

要将li1的副本存储到li2,请执行:

li2 = l1[:]

# OR, via functional approach 
# li2 = list(li1)

或者,您可以将copy.copy()用作:

import copy
li2 = copy.copy(li1)

示例示例:

>>> import random
>>> li1 = [1,2,3,4,5,6,7,8,9]
>>> li2 = li1[:]  # creating copy

# shuffling li1
>>> random.shuffle(li1)

>>> li1    # Shuffled content li1
[2, 1, 8, 6, 5, 4, 3, 9, 7]
>>> li2    # li2 holds the original copy
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> random.shuffle(li2)   # also shuffle li2
>>> li2
[1, 5, 8, 9, 7, 2, 4, 6, 3]
>>> li1
[2, 1, 8, 6, 5, 4, 3, 9, 7]

答案 1 :(得分:0)

li1=li2之后,li1li2都指向同一列表[1,2,3,4,5,6,7,8,9]。并random.shuffle将列表随机播放并返回None。从以下代码片段中可以很容易地看到它。

import random

li1 = [1,2,3,4,5,6,7,8,9]
li2 = random.shuffle(li1)

print(li1)  # [4, 9, 8, 6, 2, 5, 7, 1, 3]
print(li2)  # None

使用random.sample而无需替换,如下所示。

import random

li1 = [1,2,3,4,5,6,7,8,9]
li2 = random.sample(li1, len(li1))

print(li1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(li2)  # [4, 6, 2, 1, 7, 5, 8, 3, 9]