我是Python的新手,我遇到了以下问题。任何人都可以解释为什么以下:
[ n**2 for n in range(1, 6)]
给出:
[1, 4, 9, 16, 25]
答案 0 :(得分:1)
它被称为list comprehension。发生的事情类似于以下内容:
results = []
for n in range(1,6):
results.append(n**2)
因此,它遍历包含值[0, 1, 2, 3, 4, 5]
的列表并对每个值进行平方。然后将平方的结果添加到results
列表中,然后返回您看到的结果(相当于0**2, 1**2, 2**2
等,其中**2
表示'被提升到第二种力量')。
此结构(使用基于某些其他条件的值填充列表)是Python中常见的结构,因此列表推导提供了允许您这样做的简写语法。
答案 1 :(得分:1)
在解释器中将其分解为可管理的块:
>>> range(1, 6)
[1, 2, 3, 4, 5]
>>> 2 ** 2 # `x ** 2` means `x * x`
4
>>> 3 ** 2
9
>>> for n in range(1, 6):
... print n
1
2
3
4
5
>>> for n in range(1, 6):
... print n ** 2
1
4
9
16
25
>>> [n ** 2 for n in range(1, 6)]
[1, 4, 9, 16, 25]
答案 2 :(得分:0)
这是一个list comprehension。
如果你把它分成3个部分;用以下词分隔:'for'和'in'..
例如
[1 for 2 in 3]
向后看它可能是最容易的:
第1部分和第2部分多次运行,对于第3部分给出的列表中的每个项目执行一次。第1部分的输出反复运行,是整个操作的输出。
所以在你的例子中:
所以等效的代码是:
result = []
for n in range(1, 6):
result.append(n**2)
最后打破了一切:
input = [1, 2, 3, 4, 5]
output = []
v = input[0] # value is 1
o = v**2 # 1 to the power of two is 1
output.append(o)
v = input[1] # value is 2
o = v**2 # 2 to the power of two = (2*2) = 4
output.append(o)
v = input[2] # value is 3
o = v**2 # 3 to the power of two is = (3*3) = 9
output.append(o)
v = input[3] # value is 4
o = v**2 # 4 to the power of two is = (4*4) = 16
output.append(o)
v = input[4] # value is 5
o = v**2 # 5 to the power of two is = (5*5) = 25
output.append(o)