2008-08-05 30 views

Respuesta

30

Desde el Python FAQ:

listas y tuplas, mientras que es similar en muchos aspectos, se utilizan generalmente en formas fundamentalmente diferentes. Se puede pensar que las tuplas son similares a los registros de Pascal o las estructuras C; son pequeñas colecciones de datos relacionados que pueden ser de diferentes tipos que se operan como un grupo. Por ejemplo, una coordenada cartesiana se representa apropiadamente como una tupla de dos o tres números.

Las listas, por otro lado, son más parecidas a matrices en otros idiomas. Tienden a contener un número variable de objetos, todos los cuales tienen el mismo tipo y se operan uno a uno.

En general, por convención, que no elegiría una lista o una tupla sólo se basa en su mutabilidad (im). Elegirías una tupla para pequeñas colecciones de datos completamente diferentes en los que una clase completa sería demasiado pesada, y una lista para colecciones de cualquier tamaño razonable donde tienes un conjunto homogéneo de datos.

19

La lista [1,2,3] es dinámica y flexible, pero esa flexibilidad tiene un costo de velocidad.

La tupla (1,2,3) es fija (inmutable) y por lo tanto más rápida.

+1

cuyas operaciones son más rápidas? ¿indexación? – rafak

10

Las tuplas son una forma rápida \ flexible de crear compuestos tipos de datos. Las listas son contenedores para, bueno, listas de objetos.

Por ejemplo, usaría una lista para almacenar una lista de los detalles del estudiante en una clase.

Cada detalle de estudiante en esa lista puede ser una 3-tupla que contiene su número de rollo, nombre y puntaje de prueba.

`[(1,'Mark',86),(2,'John',34)...]` 

Además, como las tuplas son inmutables, se pueden utilizar como claves en los diccionarios.

+0

Con la sutil advertencia de que una tupla debe contener solo otras variables inmutables para que se considere que sea hashable, por ejemplo: '([], 3)' no es hashable; '(" hola ", 3)' es hashable; '(([], 3), 3)' no es hashable; '(((), 3), 3)' es hashable. – Jegschemesch

1

Como han mencionado otros, las listas y las tuplas son contenedores que se pueden usar para almacenar objetos de Python. Las listas son extensibles y sus contenidos pueden cambiar por asignación, por otro lado las tuplas son inmutables.

Además, las listas no se pueden utilizar como claves en un diccionario, mientras que las tuplas sí.

1

Si puede encontrar una solución que funcione con tuplas, utilícelas, ya que fuerza la inmutabilidad que lo conduce a una ruta más funcional. Casi nunca te arrepientes de haber recorrido el camino funcional/inmutable.

3

Cada vez que necesito pasar una colección de elementos a una función, si deseo que la función no cambie los valores pasados, utilizo tuplas.

De lo contrario, si quiero tener la función de alterar los valores, utilizo list.

Siempre si está utilizando bibliotecas externas y necesita pasar una lista de valores a una función y no está seguro de la integridad de los datos, use una tupla.

7

La noción de tuplas son muy expresivo:

  • vista pragmático, que son ideales para los valores de desembalaje (x,y=coord) embalaje y.

  • En combinación con diccionarios (tablas hash), permiten formas de mapeo que de otro modo requerirían muchos niveles de asociación. Por ejemplo, considere marcar que (x, y) se ha encontrado.

    // PHP 
    if (!isset($found[$x])) { 
        $found[$x] = Array(); 
        $found[$x][$y] = true; 
    } else if (!isset($found[$x][$y])) { 
        $found[$x][$y] = true; 
    } 
    
    # Python 
    found[(x,y)] = True # parens added for clarity 
    
  • listas deben ser utilizados con la expectativa de operaciones en su contenido (por lo tanto los diferentes menciones de inmutabilidad). Uno querrá abrir, empujar, empalmar, cortar, buscar, insertar antes, insertar después, etc. con una lista.

  • Tuplas debe ser una representación de bajo nivel de un objeto, donde se realizan comparaciones simples, o operaciones tales como extraer el n-ésimo elemento n elementos de manera predecible, como el ejemplo de coordenadas dado anteriormente.

  • Por último, las listas no son hashables, por lo que el tipo de mapeo hecho con diccionarios (tablas hash en Perl, matrices asociativas en PHP) debe hacerse con tuplas.

    Aquí está un ejemplo sencillo de tuplas y diccionarios, por fin juntos:

    """ 
    couple is a tuple of two people 
    doesLike is a dictionary mapping couples to True or False 
    """ 
    couple = "john", "jane" 
    doesLike = dict() 
    doesLike[couple] = True 
    doesLike["jane", "john"] = False # unrequited love :'(
    
2

[1, 2, 3] es una lista en la que se puede añadir o eliminar elementos.
(1, 2, 3) es una tupla en la que una vez definida, la modificación no se puede hacer.

1

[1,2,3] es una lista.

(1,2,3) es una tupla e inmutable.

2

abre una consola y ejecuta python. Prueba esto:

>>> list = [1, 2, 3]  
    >>> dir(list) 
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli 
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit 
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', 
    '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r 
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__' 
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 

Como se puede ver el último de la lista última línea tiene los siguientes métodos: 'append', 'contar', 'extender', 'índice', 'inserción', " pop', 'quitar', 'inverso', 'especie'

Ahora intenta lo mismo para tupla:

>>> tuple = (1, 2, 3) 
>>> dir(tuple) 
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ 
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get 
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__ 
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__' 
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 

Sólo 'contar' e 'índice' de métodos lista aparece aquí.

Esto se debe a que las tuplas son inmutables y no admiten ninguna modificación. En cambio, son más simples y rápidos en la implementación interna.

0

(1,2,3) es una tupla, mientras que [1,2,3] es una lista. Una tupla es un objeto inmutable mientras que una lista es mutable.

0

(1,2,3) es una tupla y [1,2,3] es una lista. Cualquiera de las dos representa secuencias de números, pero tenga en cuenta que las tuplas son inmutables y que la lista son objetos mutables de Python.

0
  • Una tupla puede representar una clave en el diccionario, porque es inmutable.
  • Use listas si tiene una colección de datos que no necesita acceso aleatorio.
Cuestiones relacionadas