español - ¿Diferencia entre lista, secuencia y segmento en Python?
slice object python (5)
¿Cuáles son las diferencias entre estos tipos de datos incorporados de Python: lista , secuencia y sector? Como lo veo, los tres representan esencialmente lo que C ++ y la matriz de llamadas Java.
En sentido estricto, una división es un tipo que representa un rango de índices, por ejemplo, un inicio, una parada y un paso. Una rebanada no es un tipo de contenedor en absoluto. Puede usar un sector para indexar una lista, lo que da como resultado una nueva lista que es una copia de una lista secundaria de la lista original.
Las listas difieren de las matrices de C ++ en que son heterogéneas; No se requiere que los elementos sean del mismo tipo. Y como MYYN ya ha señalado, la "secuencia" no es un tipo de Python, sino una descripción de una variedad de tipos incorporados.
Estás mezclando cosas muy diferentes en tu pregunta, así que solo responderé una pregunta diferente;
Ahora estás preguntando acerca de una de las interfaces más importantes de Python: iterable
: básicamente es cualquier cosa que puedas usar como for elem in iterable
.
iterable
tiene tres descendientes: sequence
, generator
y mapping
.
Una secuencia es un iterable con acceso aleatorio. Puede solicitar cualquier elemento de la secuencia sin tener que consumir los elementos anteriores. Con esta propiedad puede crear
slices
, que le dan más de un elemento a la vez. Una porción puede darte una subsecuencia:seq[from:until]
y cada nth item:seq[from:until:nth]
.list
,tuple
ystr
todas son secuencias.Si el acceso se realiza mediante claves en lugar de posiciones enteras, tiene una asignación .
dict
es el mapeo básico.El iterable más básico es un generador . No admite acceso aleatorio y, por lo tanto, no se corta. Tienes que consumir todos los artículos en el orden en que se dan. El generador normalmente solo crea sus elementos cuando se itera sobre ellos. La forma común de crear
generators
son expresiones generadoras. Se ven exactamente como la lista de comprensión, excepto entre paréntesis, por ejemplo(f(x) for x in y)
. Al llamar a una función que usa la palabra clave de rendimiento, también se genera un generador.
El adaptador común a todos los iterables es el iterador . iterators
tienen la misma interfaz que el tipo más básico que admiten, un generator
. Se crean explícitamente al llamar a iter
en un iterable y se utilizan implícitamente en todo tipo de construcciones de bucle.
Una lista es una secuencia, pero una secuencia no es necesariamente una lista. Una secuencia es cualquier tipo que admita la interfaz de secuencia ("protocolo"). Esto se hace tipificando pato en lugar de a través de una jerarquía de herencia estricta. Tenga en cuenta que las secuencias son contenedores, pero los contenedores no son necesariamente secuencias. (¡Las secuencias son, bueno, secuenciales!)
Consulte http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange
Los objetos de corte generalmente se crean implícitamente a través del azúcar sintáctico ( foo[2:5]
) y se proporcionan a los métodos especiales de tipo contenedor (como __getitem__
) que puede reemplazar. Por lo general, no tendrá que lidiar con los segmentos a menos que cree sus propias secuencias / contenedores.
Consulte http://docs.python.org/reference/datamodel.html#specialnames
Las listas son comparables a las matrices. No estoy seguro, pero creo que está implementado en cPython como una matriz de expansión dinámica. Sin embargo, la interfaz hace que se parezca más a un vector C ++ STL que a una simple matriz antigua.
-
list
son más que matrices simples. Puede inicializarlos sin dar el número de elementos. Puedeappend
/push
a ellos, puederemove
/ hacerpop
/del
ítem, puede tener listas de diferentes tipos de objetos (por ejemplo,[1,''e'', [3]]
), puede tener listas recursivas. ... y puede dividir listas, lo que significa obtener una nueva lista con solo algunos de los elementos. -
slice
son un tipo de objeto utilizado "detrás de la escena" para manejar la segmentación extendida en laa[start:stop:step]
, como lo revela lahelp(slice)
.
"Secuencia" no es un objeto, es más como una interfaz informal que algunos objetos como list
implementan.
Las listas son un tipo de secuencia, similar a una matriz
los tipos de secuencia describen un superconjunto funcional:
Hay seis tipos de secuencia: cadenas, cadenas Unicode, listas, tuplas, búferes y objetos de rango naranja.
- Las rodajas son una notación para subarreglos (o subcadenas, también)
Leer más ... http://docs.python.org/glossary.html