Что делает синтаксис [0] * x в Python? - PullRequest
13 голосов
/ 15 мая 2011

Флэш-вопрос, я смотрю на следующий код

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 строки делать?
  • почему двойная звездочка **?

Ответы [ 7 ]

16 голосов
/ 15 мая 2011

[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
13 голосов
/ 15 мая 2011

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 (в другом контексте), подробнее об этом здесь Правильный способ использования ** kwargs в Python

4 голосов
/ 15 мая 2011

X = [0] * N создает массив нулей длиной N.Например:

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

** - оператор power .

>>> 2 ** 2
4
2 голосов
/ 15 мая 2011

что делает строка X = [0] * N?

[0] - это последовательность, содержащая один элемент - 0.Умножение последовательности на n означает ее конкатенацию n раз.Таким образом, результатом является последовательность, содержащая n нулей.

почему двойная звездочка **?

Это оператор степени: b ** e = б е .

1 голос
/ 07 ноября 2018
  1. X =[0] * N, создает список размера N, где все N элементов имеют нулевое значение. например, X = [0] * 8, создает список размером 8.

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

    Графическое представление будет похоже,

The result of command [0] * 8

Технически, все восемь ячеек списка ссылаются на один и тот же объект. Это связано с тем, что списки в Python являются ссылочными структурами.

и, если вы попытаетесь присвоить списку новое значение, скажем, X[2] = 10, это технически не изменит значение существующего целочисленного экземпляра. Это вычисляет новое целое число со значением 10 и устанавливает ячейку 2 для ссылки на новое вычисленное значение.

Графическое представление,

enter image description here

  1. ** является оператором мощности и вычисляет мощность числа. например, 5 ** 2 приводит к 25.
0 голосов
/ 15 мая 2011

[0] * N создает список размером N, который содержит только 0

** - это обозначение для подъема левой стороны до степени правой стороны

Отказ от ответственности: [a] * N, где a - ссылка на объект, скопирует ссылку, она не будет делать копии a внутри сгенерированного списка

0 голосов
/ 15 мая 2011

1) Инициализирует список, содержащий N 0.

2) ** - оператор возведения в степень

...