web-dev-qa-db-fra.com

Que signifie?

J'analyse du code Python et je ne sais pas quoi

pop = population[:]

veux dire. Est-ce quelque chose comme des listes de tableaux dans Java ou comme un tableau bidimensionnel?

83
andriy

C'est un découpage, et ce qu'il fait dépend du type de population. Si population est une liste, cette ligne créera une copie de la liste. Pour un objet de type Tuple ou str, il ne fera rien (la ligne fera de même sans [:]), et pour un tableau (par exemple) NumPy, il créera une nouvelle vue des mêmes données.

102
Sven Marnach

Il peut également être utile de savoir qu'une tranche de liste en général copie une partie de la liste. Par exemple. population[2:4] renverra une liste contenant population [2] et population [3] (le découpage est exclusif à droite). En laissant de côté l'index gauche et droit, comme dans population[:] ils ont respectivement 0 et longueur (population) par défaut, sélectionnant ainsi la liste entière. C'est donc un idiome commun pour faire une copie d'une liste.

27
ThomasH

eh bien ... cela dépend vraiment du contexte. En fin de compte, il passe un objet slice (slice(None,None,None)) à l'une des méthodes suivantes: __getitem__ , - __setitem__ ou __delitem__ . (En fait, si l'objet a un __getslice__ , qui sera utilisé à la place de __getitem__, Mais qui est maintenant obsolète et ne devrait pas être utilisé).

Les objets peuvent faire ce qu'ils veulent avec la tranche.

Dans le contexte de:

x = obj[:]

Cela appellera obj.__getitem__ Avec l'objet tranche passé. En fait, cela équivaut à:

x = obj[slice(None,None,None)]

(bien que le premier soit probablement plus efficace car il n'a pas à rechercher le constructeur slice - Tout est fait en bytecode).

Pour la plupart des objets, c'est un moyen de créer une copie superficielle d'une partie de la séquence.

Prochain:

x[:] = obj

Est un moyen de définir les éléments (il appelle __setitem__) En fonction de obj.

et, je pense que vous pouvez probablement deviner quoi:

del x[:]

appels ;-).

Vous pouvez également passer différentes tranches:

x[1:4]

construit slice(1,4,None)

x[::-1]

construit slice(None,None,-1) et ainsi de suite. Pour en savoir plus: Expliquer la notation de tranche de Python

14
mgilson

Il s'agit d'un tranche du début de la séquence à la fin, produisant généralement une copie superficielle.

(Eh bien, c'est plus que cela , mais vous n'avez pas encore besoin de vous en soucier.)

Il crée une copie de la liste, au lieu d'attribuer simplement un nouveau nom à la liste déjà existante.

6
Jim Brissom

[:]
utilisé pour limiter ou trancher dans un tableau, hachage
par exemple:
[1: 5] pour afficher des valeurs comprises entre 1 inclus et 5 exclus, c'est-à-dire 1-4
[début Fin]

.