[英]convert list comprehension into loop
我正在尝试将列表理解转换为 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**2
和x**2
不匹配。 在我的代码中,没有x**2
两次
lst = []
for x in range(1):
for x in range(11):
lst.append(x**4)
print lst
有人可以帮助x**2
出现两次的 for 循环吗?
在列表推导中,内部推导的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)
但是展开理解和分解x**2
在我看来都是不必要的更改。 这很简单,任何有能力的程序员都应该可以理解; 如果某些事情看起来特别不明显,可以添加评论。
顺便说一句,如果您只是在学习基础知识,那么您可能应该忽略 Python 2,而将时间花在该语言的当前推荐和支持的版本上,即 Python 3。
干得好,
lst = []
for x in range(11):
x = x**2
lst.append(x**2)
这与,
for x in range(11):
lst.append(x**4)
输出:
[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]
如果您非常特别需要使用嵌套for
循环和x**2
两次,那么您可以尝试以下代码,
lst = []
for x in range(11):
lst.append(x**2) # appends squared of x to the lst
for x in [lst[-1]]: # loops (one iteration) using the last inserted item of the list `lst`
lst[-1] = x**2 # performs squared operation on the x value again and update the value in lst
print lst
输出:
[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]
在这里查看所有操作。
我会尽力解释哪里出了问题
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]
为了在不使用列表理解的情况下获得相同的结果,您可以做的是将其拆分为 2 个列表。 嵌套列表和输出列表。
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],而不是列表中的元素。
我想列表理解在这个意义上是聪明的。
lst =[]
tmp = []
for x in range(11):
tmp.append(x**2)
for x in tmp:
lst.append(x**w)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.