这是我的代码
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
,为什么?有没有办法让他们独立洗牌?
我该如何解决这个问题?非常感谢你!
答案 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
之后,li1
和li2
都指向同一列表[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]