2011-05-15 74 views
4

閃光的問題,我在看下面的代碼Python中的[0] * x語法是做什麼的?

from __future__ import division 
import math 
import time 

def dft(x, inverse = False, verbose = False) : 
    t = time.clock() 
    N = len(x) 
    inv = -1 if not inverse else 1 
    X =[0] * N 
    for k in xrange(N) : 
     for n in xrange(N) : 
      X[k] += x[n] * math.e**(inv * 2j * math.pi * k * n/N) 
     if inverse : 
      X[k] /= N 
    t = time.clock() - t 
    if verbose : 
     print "Computed","an inverse" if inverse else "a","DFT of size",N, 
     print "in",t,"sec." 
    return X 

,我想知道(我不知道蟒蛇):

  • 什麼是X = [0] * N行嗎?
  • 爲什麼雙星號**?
+0

謝謝大家的回答! – Paul 2011-05-15 12:17:38

+1

你爲什麼不自己嘗試?例如,在你的解釋器外殼中有類似'>>> [0] * 10'的東西就足夠了...... – joaquin 2011-05-15 13:22:33

回答

6

x = [0] * n證明這裏:

>>> [0]*10 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

這是乘法「列表中的元素

>>> [1, 2, 3] * 3 
[1, 2, 3, 1, 2, 3, 1, 2, 3] 

**是電力運營商

>>> 3**2 
9 

雖然要小心,它也可以是** kwargs(在不同的上下文中),看到更多的是,這裏Proper way to use **kwargs in Python

4

X = [0] * N創建一個長度爲N長度的零的數組。例如:

>>> [0] * 10 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

**power operator

>>> 2 ** 2 
4 
2

什麼的X = [0] * N線做什麼?

[0]是包含單個元素的序列 - 0。乘以一個序列時間n意味着連接它自己n次。也就是說,結果是一個包含n零的序列。

爲什麼雙星號**?

這是電力運營商:b ** e = bê

0

1)它初始化一個包含N 0的列表。

2)**是冪運算符

13

[0] * x創建具有x單元的明細表。所以,

>>> [ 0 ] * 5 
[0, 0, 0, 0, 0] 
>>> 

被警告他們都指向同一個對象。對於像整數這樣的不可變對象來說這很酷,但對列表等事情卻很痛苦。

>>> t = [[]] * 5 
>>> t 
[[], [], [], [], []] 
>>> t[0].append(5) 
>>> t 
[[5], [5], [5], [5], [5]] 
>>> 

**運算符用於指數化。

>>> 5 ** 2 
25 
+1

對於同一個可變對象,我會修正「帶有'x'元素」,因爲你可以將列表有多個元素。 – Henry 2011-05-15 10:47:52

0

[0] * N創建大小爲N的名單隻包含0的

**是提高一個符號在左側右側的電源

免責聲明: [a] * N其中a是一個對象的引用將複製引用,它不會使a插件副本ide生成列表