将列表转换为循环

2024-04-25 10:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将列表理解转换为for循环。 lst = [ x**2 for x in [x**2 for x in range(11)] ]

我试过下面的代码

lst = []
for x in range(1):
  for x in range(11):
    lst.append(x**4)
print lst

但这与x**2x**2不匹配。在我的代码中,没有x**2两次

lst = []
for x in range(1):
   for x in range(11):
       lst.append(x**4)
print lst

有人能帮助处理x**2出现两次的for循环吗?你知道吗


Tags: 代码in列表forrangeprintappendlst
3条回答
lst =[]
tmp = []
for x in range(11):
    tmp.append(x**2)

for x in tmp:
    lst.append(x**w) 

我会尽力解释出什么地方出了问题

lst = [ x**2 for x in [x**2 for x in range(11)] ]
print(lst)
# outputs [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]

为了在不使用列表理解的情况下获得相同的结果,您可以将列表分成两个部分。嵌套列表和输出列表。你知道吗

lst2= []
nestedlist = []
for x in range(11):
  nestedlist.append(x**2)
for x in nestedlist:
  x = x**2
  lst2.append(x)

print(lst2)
# outputs [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]

注意在列表理解中,内部列表是如何在外部列表之前先迭代的。同样的逻辑也适用于这个“拆分”版本。你知道吗

这样做的原因是:错了

lst2= []
nestedlist = []
for x in range(11):
  nestedlist.append(x**2)
  for x in nestedlist:
    lst2.append(x**2)

print(lst2)
#outputs [0, 0, 1, 0, 1, 16, 0, 1, 16, 81, 0, 1, 16, 81, 256, 0, 1, 16, 81, 256, 625, 0, 1, 16, 81, 256, 625, 1296, 0, 1, 16, 81, 256, 625, 1296, 2401, 0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]

是因为当你做以下事情时

  for x in nestedlist:
    lst2.append(x**2)

实际上,您正在应用**2列表的长度。因此输出例如[0,1]到[0,1,0,1],而不是列表中的元素。你知道吗

我想从这个意义上说,列表理解是明智的。你知道吗

在列表理解中,内部理解的x与外部作用域中同名的变量不同。展开时,变量在同一范围内,因此不能使用相同的名称。你知道吗

lst = []
for y in range(1):
  for x in range(11):
    lst.append(x**4)
print(lst)

但当然,您不需要两个循环—在静态列表上使用单个元素的循环是完全没有意义的。你知道吗

如果你坚持要有x**2两次,当然也可以这样做:

lst = []
for x in range(11):
    x = x ** 2
    lst.append(x**2)

但在我看来,展开理解和分解都是不必要的改变。这很简单,任何有能力的程序员都应该能理解;如果有什么特别不明显的地方,可以添加注释。你知道吗

顺便说一下,如果您只是在学习基础知识,那么您可能应该忽略python2,而将时间花在当前推荐和支持的语言版本上,即python3。你知道吗

相关问题 更多 >

    热门问题