Estoy analizando un código Python y no sé qué
pop = population[:]
medio. ¿Es algo así como listas de matrices en Java o como una matriz bidimensional?
Estoy analizando un código Python y no sé qué
pop = population[:]
medio. ¿Es algo así como listas de matrices en Java o como una matriz bidimensional?
Respuestas:
Es un ejemplo de notación de corte y lo que hace depende del tipo de population
. Si population
es una lista, esta línea creará una copia superficial de la lista. Para un objeto de tipo tuple
o 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.
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 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.
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 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:
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 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:
x[:] = obj
Es una forma de configurar los elementos (llama __setitem__
) en función de obj
.
y creo que probablemente puedas adivinar qué:
del x[:]
llamadas ;-).
También puedes pasar diferentes rodajas:
x[1:4]
constructos slice(1,4,None)
x[::-1]
construye slice(None,None,-1)
y así sucesivamente. Lectura adicional: Explica la notación de corte de Python
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).
Crea una copia de la lista, en lugar de simplemente asignar un nuevo nombre a la lista ya existente.
[:] 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.
a[1:5]
devuelve los elementos 1-4, no 2-4.