在与另一个列表关联的列表上使用 shuffle 方法将它们都洗牌?
Using shuffle method on list associated to another list shuffles them both?
这是我的代码
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
,为什么?有没有办法独立洗牌?
我该如何解决这个问题?非常感谢!
当您执行 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]
在li1=li2
之后,li1
和li2
都指向同一个列表[1,2,3,4,5,6,7,8,9]
。并且 random.shuffle
将列表 替换为 和 returns 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]
这是我的代码
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
,为什么?有没有办法独立洗牌?
我该如何解决这个问题?非常感谢!
当您执行 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]
在li1=li2
之后,li1
和li2
都指向同一个列表[1,2,3,4,5,6,7,8,9]
。并且 random.shuffle
将列表 替换为 和 returns 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]