J'analyse du code Python et je ne sais pas quoi
pop = population[:]
veux dire. Est-ce que cela ressemble à des listes de tableaux en Java ou à un tableau bidimensionnel? Pourrait apprécier de l'aide, merci.
J'analyse du code Python et je ne sais pas quoi
pop = population[:]
veux dire. Est-ce que cela ressemble à des listes de tableaux en Java ou à un tableau bidimensionnel? Pourrait apprécier de l'aide, merci.
C'est un découpage, et ce que cela 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 un str
, cela ne fera rien (la ligne fera la même chose sans [:]
), et pour un (par exemple) NumPy tableau, il va créer une nouvelle vue pour les mêmes données.
Il peut également être utile de savoir qu’une partie de la liste effectue en général une copie d’une partie de la liste. Par exemple, population[2:4]
renverra une liste contenant la population [2] et la population [3] (le découpage en tranches est exclusif). Laissant de côté les index gauche et droit, comme dans population[:]
ils sont par défaut à 0 et à la longueur (population) respectivement, sélectionnant ainsi toute la liste. Par conséquent, il est courant de faire une copie d’une liste.
eh bien... cela dépend vraiment du contexte. En fin de compte, il passe un slice
objet (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 doit pas être utilisé).
Les objets peuvent faire ce qu'ils veulent avec la tranche.
Dans le cadre de:
x = obj[:]
Cela appellera obj.__getitem__
avec la tranche de l'objet passé en. En fait, c'est complètement équivalente à:
x = obj[slice(None,None,None)]
(bien que l'ancienne est probablement plus efficace, car il n'a pas à rechercher l' slice
constructeur, tout est fait en bytecode).
Pour la plupart des objets, c'est une façon de créer une copie d'une partie de la séquence.
Prochaine:
x[:] = obj
Est une façon de définir les objets (qu'il appelle __setitem__
) basé sur l' obj
.
et, je pense que vous pouvez probablement deviner ce que:
del x[:]
les appels ;-).
Vous pouvez également passer les différentes tranches:
x[1:4]
les constructions de l' slice(1,4,None)
x[::-1]
les constructions de l' slice(None,None,-1)
et ainsi de suite. Pour en savoir plus: Le Python Tranche de Notation
C'est une tranche du début à la fin de la séquence, produisant généralement une copie superficielle.
(Eh bien, c'est plus que ça , mais vous n'avez pas encore besoin de vous en soucier.)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.