关于数学:python中的[0]*x语法有什么作用?

What does the [0]*x syntax do in Python?

一个闪现的问题,我在看下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

我想知道(我不认识Python):

  • x=[0]*n行的作用是什么?
  • 为什么是双星**?


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

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

请注意,它们都指向同一对象。对于像整数这样的不可变项,这很酷,但是对于像列表这样的东西,这很痛苦。

1
2
3
4
5
6
7
>>> t = [[]] * 5
>>> t
[[], [], [], [], []]
>>> t[0].append(5)
>>> t
[[5], [5], [5], [5], [5]]
>>>

**运算符用于指数化。

1
2
>>> 5 ** 2
25


这里演示了X = [0] * N

1
2
>>> [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

它"倍增"列表元素

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

**是电力运营商。

1
2
>>> 3**2
9

尽管要小心,它也可能是**Kwargs(在不同的上下文中),请在这里详细了解在python中使用**Kwargs的正确方法。


X = [0] * N创建一个长度为N的零数组。例如:

1
2
>>> [0] * 10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

**是电力运营商。

1
2
>>> 2 ** 2
4

what does the X =[0] * N line do?

[0]是一个包含单个元素的序列——0。将一个序列乘以N意味着将它与N次连在一起。也就是说,结果是一个包含N零的序列。

why the double asterisk ** ?

是电力运营商:b ** e=be。


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

    x=[0,0,0,0,0,0,0,0,0]

    图示将是,

  • The result of command [0] * 8

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

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

    图示,

    enter image description here

  • **是幂运算符,计算一个数的幂。例如,5 ** 2得到25。

  • [0] * N创建一个大小为n的列表,其中只包含0

    **是一个将左侧提升到右侧的符号。

    免责声明:[a] * N,其中a是对一个对象的引用,会复制引用,不会在生成的列表中复制a


    1)初始化包含n 0的列表。

    2)**是求幂运算符。