Python 电源设置,无法找出我的错误

Python Power set , can't figure out my error

我的代码会崩溃并且 运行 永远:

def subsets(nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    results = [[]]
    for num in nums:
        for result in results:
            results.extend([result + [num]])
    return results 

虽然我用谷歌搜索,但找到了类似的解决方案:

def subsets(nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    results = [[]]
    for num in nums:
        results.extend([result + [num] for result in results])
    return results

这里有什么区别?

重点是:

for result in results:
    results.extend([result + [num]])

在这里,您正在遍历 results 列表。迭代器总是有生命的,直到你真正到达终点才会结束。对于列表,您可以简单地将其想象成一个指针,从第一个元素开始,然后一直指向下一个元素,直到到达结尾。

除了在您的情况下,您要在每次迭代中向 results 列表添加一个元素(因为 [result + [num]] 是一个单元素列表)。因此,随着迭代器不断前进,您不断向末尾添加一个元素,以确保迭代器永远不会到达末尾。

作为一般规则,永远不要修改当前正在迭代的集合。所以在这种情况下,你不应该在迭代相同的东西时修改 results

而这正是其他解决方案中的以下行所避免的:

results.extend([result + [num] for result in results])

这使用了列表推导,本质上等同于:

tmp = []
for result in results:
    tmp.append(result + [num])
results.extend(tmp)

如您所见,results 未修改 对其进行迭代。 tmp 列表首先被创建,然后一旦完成,results 列表通过扩展整个 tmp 列表来修改。