2013-01-09 90 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)