Es un ejemplo de notación de corte y lo que hace depende del tipo de population. Si populationes una lista, esta línea creará una copia superficial de la lista. Para un objeto de tipo tupleo a str, no hará nada (la línea hará lo mismo sin él [:]), y para una (digamos) matriz NumPy, creará una nueva vista de los mismos datos.
Por si acaso: el corte devuelve una copia superficial.
André Caron
4
@ilius: Tal vez l.copy()sea más legible, pero no funcionará.
Sven Marnach
13
list(l)siempre funciona, es más legible y se garantiza que devolverá una copia incluso con algo comonumpy.array
Rosh Oxymoron
1
@Eli: Sí, al lado list.clear(). Sin embargo, tomará algún tiempo hasta que esto lleve a una reducción significativa de este tipo de preguntas sobre SO. :)
Sven Marnach
1
@MichaelGraczyk: Supongo que estás hablando de matrices NumPy aquí. En lugar de usar A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)], casi siempre prefiero numpy.rollaxis(A, axis, 0)[k]. En general, rara vez me he encontrado con un caso de uso en el que necesite crear slice()objetos directamente . Si los necesita de todos modos, NumPy proporciona el s_asistente como una forma alternativa de crearlos.
Sven Marnach
27
También puede ser útil saber que un segmento de lista en general hace una copia de parte de la lista. Por ejemplo population[2:4], devolverá una lista que contiene la población [2] y la población [3] (el corte es exclusivo por la derecha). Dejando a un lado el índice izquierdo y derecho, ya population[:]que están predeterminados en 0 y longitud (población) respectivamente, seleccionando así la lista completa. Por lo tanto, este es un modismo común para hacer una copia de una lista.
bueno ... esto realmente depende del contexto. En última instancia, que pasa a un sliceobjeto ( slice(None,None,None)) a uno de los métodos siguientes: __getitem__, __setitem__o __delitem__. (En realidad, si el objeto tiene un __getslice__, se usará en lugar de __getitem__, pero ahora está en desuso y no debería usarse).
Los objetos pueden hacer lo que quieran con el corte.
En el contexto de:
x = obj[:]
Esto llamará obj.__getitem__con el objeto slice pasado. De hecho, esto es completamente equivalente a:
x = obj[slice(None,None,None)]
(aunque el primero es probablemente más eficiente porque no tiene que buscar el sliceconstructor, todo está hecho en código de bytes).
Para la mayoría de los objetos, esta es una forma de crear una copia superficial de una parte de la secuencia.
Próximo:
x[:]= obj
Es una forma de configurar los elementos (llama __setitem__) en función de obj.
[:] se
usa para limitar o cortar en una matriz, hash,
por ejemplo:
[1: 5] para mostrar valores entre 1 incluido y 5 exclusivo, es decir, 1-4
[inicio: fin]
básicamente se usa en una matriz para cortar, entienda el corchete aceptar la variable que significa valor o clave para mostrar, y ":" se usa para limitar o dividir la matriz completa en paquetes.
No hay razón para chocar con una pregunta tan antigua que ya tiene 5 respuestas similares e incluso una aceptada ... Además, a[1:5]devuelve los elementos 1-4, no 2-4.
Skamah One
@SkamahOne Oh, no lo sé. Quizás no en este caso, pero hay ocasiones en las que puede ser útil plantear preguntas muertas. Perspectiva diferente, redacción diferente, etc. En este caso, corrigió la respuesta y, con suerte, ellos también aprendieron algo.
Respuestas:
Es un ejemplo de notación de corte y lo que hace depende del tipo de
population
. Sipopulation
es una lista, esta línea creará una copia superficial de la lista. Para un objeto de tipotuple
o astr
, no hará nada (la línea hará lo mismo sin él[:]
), y para una (digamos) matriz NumPy, creará una nueva vista de los mismos datos.fuente
l.copy()
sea más legible, pero no funcionará.list(l)
siempre funciona, es más legible y se garantiza que devolverá una copia incluso con algo comonumpy.array
list.clear()
. Sin embargo, tomará algún tiempo hasta que esto lleve a una reducción significativa de este tipo de preguntas sobre SO. :)A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
, casi siempre prefieronumpy.rollaxis(A, axis, 0)[k]
. En general, rara vez me he encontrado con un caso de uso en el que necesite crearslice()
objetos directamente . Si los necesita de todos modos, NumPy proporciona els_
asistente como una forma alternativa de crearlos.También puede ser útil saber que un segmento de lista en general hace una copia de parte de la lista. Por ejemplo
population[2:4]
, devolverá una lista que contiene la población [2] y la población [3] (el corte es exclusivo por la derecha). Dejando a un lado el índice izquierdo y derecho, yapopulation[:]
que están predeterminados en 0 y longitud (población) respectivamente, seleccionando así la lista completa. Por lo tanto, este es un modismo común para hacer una copia de una lista.fuente
bueno ... esto realmente depende del contexto. En última instancia, que pasa a un
slice
objeto (slice(None,None,None)
) a uno de los métodos siguientes:__getitem__
,__setitem__
o__delitem__
. (En realidad, si el objeto tiene un__getslice__
, se usará en lugar de__getitem__
, pero ahora está en desuso y no debería usarse).Los objetos pueden hacer lo que quieran con el corte.
En el contexto de:
Esto llamará
obj.__getitem__
con el objeto slice pasado. De hecho, esto es completamente equivalente a:(aunque el primero es probablemente más eficiente porque no tiene que buscar el
slice
constructor, todo está hecho en código de bytes).Para la mayoría de los objetos, esta es una forma de crear una copia superficial de una parte de la secuencia.
Próximo:
Es una forma de configurar los elementos (llama
__setitem__
) en función deobj
.y creo que probablemente puedas adivinar qué:
llamadas ;-).
También puedes pasar diferentes rodajas:
constructos
slice(1,4,None)
construye
slice(None,None,-1)
y así sucesivamente. Lectura adicional: Explica la notación de corte de Pythonfuente
Es un corte desde el principio de la secuencia hasta el final, que generalmente produce una copia superficial.
(Bueno, es más que eso , pero no es necesario que te importe todavía).
fuente
Crea una copia de la lista, en lugar de simplemente asignar un nuevo nombre a la lista ya existente.
fuente
[:] se
usa para limitar o cortar en una matriz, hash,
por ejemplo:
[1: 5] para mostrar valores entre 1 incluido y 5 exclusivo, es decir, 1-4
[inicio: fin]
básicamente se usa en una matriz para cortar, entienda el corchete aceptar la variable que significa valor o clave para mostrar, y ":" se usa para limitar o dividir la matriz completa en paquetes.
fuente
a[1:5]
devuelve los elementos 1-4, no 2-4.