2013-01-09 51 views
1

我是Python新手,遇到以下查询。任何人都可以解释为什么以下:构建列表

[ n**2 for n in range(1, 6)] 

给出:

[1, 4, 9, 16, 25] 
+0

下面是一些有用的阅读:HTTP://docs.python .ORG/2 /教程/ datastructures.html#列表内涵 – squiguy

回答

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

分解成可管理的块中的解释:

>>> 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] 
0

所以这是一个list comprehension

如果将其分解为3个部分;用词'for'和'in'分隔。

例如,

[1 2 3]

大概阅读它向后是最简单的:

  • 3 - 这是输入的列表转换整个操作
  • 2 - 这是单个项目从大名单
  • 1 - 这是做关于该项目

部分1和2的操作是运行米对于第3部分给出的列表中的每个项目,都需要一次。部分1的输出反复运行,是整个操作的输出。


因此,在你例如:

  • 3 - 生成一个列表:[1,2,3,4,5] - 从第一个参数Range奔跑一个之前第二PARAM
  • 2 - 'n' 表示在该列表
  • 1单个数字 - 生成n的新列表** 2(N为2的幂)

所以等效代码如下:

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)