Python中的[0]*x语法有什么作用?

Pau*_*aul 13 python math programming-languages

一个flash问题,我正在看下面的代码

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
Run Code Online (Sandbox Code Playgroud)

我想知道(我不知道python):

  • X = [0]*N线做什么?
  • 为什么双星号**?

Nou*_*him 16

[0] * x创建一个列表x元素.所以,

>>> [ 0 ] * 5
[0, 0, 0, 0, 0]
>>> 
Run Code Online (Sandbox Code Playgroud)

请注意,他们都指向同一个对象.这对于像整数这样的不可变因素来说很酷,但对列表之类的东西却很痛苦.

>>> t = [[]] * 5
>>> t
[[], [], [], [], []]
>>> t[0].append(5)
>>> t
[[5], [5], [5], [5], [5]]
>>> 
Run Code Online (Sandbox Code Playgroud)

**运算符用于求幂.

>>> 5 ** 2 
25
Run Code Online (Sandbox Code Playgroud)


Hen*_*nry 13

x = [0] * n证明在这里:

>>> [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

它将列表元素"倍增"

>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

**是电力运营商

>>> 3**2
9
Run Code Online (Sandbox Code Playgroud)

虽然要小心,它也可能是**kwargs(在不同的上下文中),请参阅更多关于这里的正确方法在Python中使用**kwargs


Sbk*_*824 5

  1. X =[0] * N, 生成大小为 N 的列表,所有 N 元素的值都为零。例如,X = [0] * 8生成一个大小为 8 的列表。

    X = [0, 0, 0, 0, 0, 0, 0, 0]

    图片表示会像,

命令的结果 [0] * 8

从技术上讲,列表的所有八个单元格都引用同一个对象。这是因为列表是 Python 中的引用结构。

并且,如果您尝试为 list 分配一个新值,例如X[2] = 10,这在技术上不会更改现有整数实例的值。这将计算一个新的整数,值为 10,并将单元格 2 设置为引用新计算的值。

图片表示,

在此处输入图片说明

  1. **是幂运算符并计算一个数的幂。例如,5 ** 2结果为 25。