Ce qui ne l' [0]*x syntaxe faire en Python?
Un flash question, je suis en train de regarder le code suivant
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
et je me demandais (je ne connais pas python):
- quoi le X =[0] * N de ligne faire?
- pourquoi le double astérisque ** ?
- Merci à vous tous pour vos réponses!
- pourquoi ne pas vous essayer par vous-même? Par exemple, quelque chose comme
>>> [0] * 10
dans votre interpréteur shell aurait été suffisant...
Vous devez vous connecter pour publier un commentaire.
La
x = [0] * n
est démontré ici:Il multiplie les " la liste des éléments
La
**
est la puissance de l'opérateurMais attention, il peut aussi être **kwargs (dans un contexte différent), voir plus à ce sujet ici Bonne façon d'utiliser **kwargs en Python
La
[0] * x
crée une liste avecx
éléments. Donc,Être averti qu'elles pointent toutes vers le même objet. C'est cool pour immutables tels que les entiers, mais une douleur pour des choses comme des listes.
La
**
opérateur est utilisé pour exponentation.x
éléments" parce que vous pouvez multiplier les listes de plusieurs éléments.X = [0] * N
crée un tableau de zéros deN
longueur. Par exemple:**
est le la puissance de l'opérateur.[0]
est une séquence contenant un seul élément –0
. La multiplication d'une séquence foisn
signifie enchaînantn
fois pour lui-même. C'est, le résultat est une séquence contenantn
zéros.C'est la puissance de l'opérateur:
b ** e
= bf.X =[0] * N
, produit une liste de taille N, avec tous les éléments N étant la valeur zéro. par exemple,X = [0] * 8
, produit une liste de taille 8.X = [0, 0, 0, 0, 0, 0, 0, 0]
De la représentation picturale sera comme,
Techniquement, l'ensemble des huit cellules de la liste de référence au même objet. C'est en raison du fait que les listes sont référentiel des structures en python.
et, si vous essayez d'affecter une nouvelle valeur à la liste, dire
X[2] = 10
, ce n'est techniquement pas modifier la valeur de l'existant entier instance. Ce calcule un nouveau entier, avec une valeur de 10, et des ensembles de cellules 2 pour faire référence à la nouvelle valeur calculée.De la représentation picturale,
**
est la puissance de l'opérateur et calcule la puissance d'un nombre. par exemple,5 ** 2
résultats dans 25.1) Il initialise une liste contenant N 0.
2)
**
est l'opérateur exponentiel[0] * N
crée une liste de taille N qui ne contient que des 0la
**
est une notation pour l'élevage de la côté gauche à la puissance de côté droitAvertissement:
[a] * N
oùa
est une référence à un objet de copie de la référence, il ne sera pas faire des copies dea
à l'intérieur de la liste générée