LeetCode 384 - Shuffle an Array [Python],为什么我们使用“list(self.nums)”

时间:2017-01-16 04:46:42

标签: python

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已经是一个列表了。

2 个答案:

答案 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保存原始列表的内容。