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
列表来修改。
我的代码会崩溃并且 运行 永远:
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
列表来修改。