撤消 python 列表理解

Undo python list comprehension

这段python代码是列表理解的例子

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

# [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]

如果不在list comprehension中怎么写?

我的理解是生成的列表是range(11)中每个数字的平方的平方。所以我明白这是如何获得第一部分的:

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

# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是我怎样才能得到第二部分呢?

循环两次

lst = []
for item in range(11):
    lst.append(item**2)
i = 0
for item in lst:
    lst[i] = (item**2)
    i = i + 1
print(lst)

理解等同于

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

之后你可以

print(lst)

观察

[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]

等同于:

lst = []
num_lst = []
for x in range(11):
    num_lst.append(x**2)
for x in num_lst:
    lst.append(x**2)
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)]]

# equivalent to:
squares = []
squares2 = []
for x in range(11):
    squares.append(x**2)

for item in squares:
    squares2.append(item**2)
    
print(squares2)
print(squares2==lst)

输出:

[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000]
True