import random
class Solution(object):
def __init__(self, nums):
"""
:type nums: List[int]
:type size: int
"""
self.nums = nums
def reset(self):
"""
Resets the array to its original configuration and return it.
:rtype: List[int]
"""
return self.nums
def shuffle(self):
"""
Returns a random shuffling of the array.
:rtype: List[int]
"""
ret = list(self.nums)
random.shuffle(ret)
return ret
为什么我们使用ret = list(self.nums)
?我尝试使用ret = left.nums
,但它没有通过LeetCode解决方案。我不明白为什么我们将list()
放在self.nums
前面。我的猜测是self.nums
已经是一个列表了。
答案 0 :(得分:1)
在此处拨打list()
将创建self.nums
的副本(请参阅How to clone or copy a list?):
>>> l = [1, 2, 3]
>>> x = l
>>> l.append(4)
>>> x, l
([1, 2, 3, 4], [1, 2, 3, 4])
>>> y = list(l)
>>> l.append(5)
>>> y, l
([1, 2, 3, 4], [1, 2, 3, 4, 5])
这意味着shuffle()
在返回一个混洗列表时保持基础的数字列表保持不变(因为random.shuffle()
将输入混合在一起)。
保持此列表不变,允许reset()
方法工作。
答案 1 :(得分:0)
ret = list(self.nums)
创建一个新列表,因为shuffle会在适当的位置进行随机播放。因此,ret
包含原始列表的副本,该副本会被洗牌并返回,self.nums
保存原始列表的内容。