繁体   English   中英

在 python 中将列表理解转换为正常的 for 循环

[英]convert list comprehension to normal for loop in python

nums = [1,2,3]
result = [[]]
for num in nums:
    result.extend([subset + [num] for subset in result])
return result

这是我的代码

nums = [1,2,3]
result = [[]]
for num in nums:
    for subset in result:
        result.extend([subset + [num]])
return result

我尝试使用嵌套的 for 循环重写它,但它进入了无限。 我想知道为什么列表理解工作正常,而正常的 for 循环不起作用。 谢谢你。

这是因为在列表理解版本中,会获取result的副本,然后执行操作,而在 for 循环版本中,您在迭代时不断扩展result ,这将导致无限循环。

您可以为每个循环使用result副本,这样您将获得相同的结果,例如:

nums = [1,2,3]
result = [[]]
for num in nums:
    for subset in result[:]:
        result.extend([subset + [num]])
print(result)

使用切片, result[:]返回result result

Output:

[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

您需要创建一个要附加到result的列表,然后使用该列表扩展result 这就是理解的捷径。

nums = [1,2,3]
result = [[]]
for num in nums:
    subsets = []
    for subset in result:
      subsets.append(subset + [num])
    result.extend(subsets)

这应该与您的代码相同:

if __name__ == "__main__":
    nums = [1, 2, 3]
    result = [[]]
    for num in nums:
        for subset in list(result):
            result += [subset + [num]]
    print(result)

我假设您有类似的东西,但使用过

for subset in result:

代替

for subset in list(result):

我想你的循环是无限的,因为你迭代了你在每次迭代中扩展的同一个列表。 您需要遍历列表的副本...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM