Python: qual é a diferença entre (1,2,3) e [1,2,3], e quando devo usar cada um?

votos
44

Em muitos lugares, (1,2,3)e [1,2,3]podem ser usados alternadamente.

Quando devo usar um ou o outro, e por quê?

Publicado 05/08/2008 em 08:18
fonte usuário
Em outras línguas...                            


14 respostas

votos
31

Desde o FAQ Python :

Listas e tuplas, enquanto semelhantes em muitos aspectos, são geralmente usados ​​de maneiras fundamentalmente diferentes. Tuples pode ser pensado como sendo semelhante a registros Pascal ou estruturas C; eles são pequenas coleções de dados relacionados que podem ser de diferentes tipos, que são operados como um grupo. Por exemplo, um em coordenadas cartesianas, é apropriadamente representada como um tuplo de dois ou três números.

Listas, por outro lado, são mais como matrizes em outros idiomas. Eles tendem a manter um número variável de objetos todos os que têm o mesmo tipo e que são operados em um-a-um.

Geralmente por convenção você não iria escolher uma lista ou uma tupla apenas com base na sua (im) mutabilidade. Você escolheria um tuple para pequenas coleções de completamente diferentes partes de dados no qual uma classe full-blown seria demasiado pesado, e uma lista de coleções de qualquer tamanho razoável, onde você tem um conjunto homogêneo de dados.

Respondeu 05/08/2008 em 14:22
fonte usuário

votos
19

A lista [1,2,3] é dinâmico e flexível, mas essa flexibilidade tem um custo de velocidade.

O tuplo (1,2,3) é fixo (imutáveis) e, portanto, mais rapidamente.

Respondeu 05/08/2008 em 08:27
fonte usuário

votos
11

Tuplas são uma rápida maneira \ flexível para criar compósitos tipos de dados. As listas são recipientes para, assim, listas de objetos.

Por exemplo, você usaria uma lista para armazenar uma lista de detalhes de estudantes em uma classe.

Cada detalhe estudante nessa lista pode ser um 3-tupla contendo o número do rolo, nome e pontuação no teste.

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

Também, porque tuplas são imutáveis ​​eles podem ser usados ​​como chaves em dicionários.

Respondeu 07/08/2008 em 12:21
fonte usuário

votos
7

A noção de tuplas são altamente expressiva:

  • Pragmaticamente, eles são ótimos para embalar e desembalar os valores ( x,y=coord).

  • Em combinação com dicionários (tabelas de hash), que permitem que as formas de mapeamento que iriam requerer muitos níveis de associação. Por exemplo, considere marcação que (x, y) foi 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 deve ser utilizado com a expectativa de operações sobre o seu conteúdo (por conseguinte, as várias menções de imutabilidade). Um vai querer aparecer, empurrar, emenda, fatia, de pesquisa, insira antes, inserir depois, etc com uma lista.

  • Tuplos deve ser uma representação de baixo nível de um objecto, em que as comparações simples são feitas, ou operações, tais como extracção do elemento n'ésimo ou n elementos de uma forma previsível, como o exemplo dado anteriormente coordenadas.

  • Por último, as listas não são Hashable, de modo que o tipo de mapeamento feito com dicionários (tabelas hash em Perl, arrays associativos em PHP) deve ser feito com tuplas.

    Aqui está um exemplo simples de tuplas e dicionários, finalmente 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 :'(
    
Respondeu 15/08/2008 em 19:00
fonte usuário

votos
4

[1, 2, 3]é uma lista em que se pode adicionar ou excluir itens.
(1, 2, 3)é uma tupla em que, uma vez definida, a modificação não pode ser feito.

Respondeu 25/06/2011 em 12:14
fonte usuário

votos
3

Sempre que eu preciso passar em uma coleção de itens para uma função, se eu quero a função para não alterar os valores passados ​​em - I usar tuplas.

Else se eu quiser ter a função de alterar os valores, eu uso lista.

Sempre se você estiver usando bibliotecas externas e precisa passar em uma lista de valores para uma função e não tem certeza sobre a integridade dos dados, use uma tupla.

Respondeu 15/08/2008 em 17:38
fonte usuário

votos
2
  • Uma tupla pode representar uma chave no dicionário, porque é imutável.
  • Use listas, se você tem uma coleção de dados que não precisa de acesso aleatório.
Respondeu 20/05/2017 em 07:30
fonte usuário

votos
2

abra um console e executar python. Tente isto:

  >>> 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 você pode ver a última na última linha lista tem os seguintes métodos: 'append', 'contagem', 'estender', 'index', 'inserção', 'pop', 'remover', 'tipo 'reverse' '

Agora tente a mesma 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']

Apenas 'count' e 'index' a partir de métodos de lista aparece aqui.

Isso ocorre porque tuplas são imutáveis ​​e eles não suportam quaisquer modificações. Em vez disso, são mais simples e mais rápido na implementação interna.

Respondeu 10/10/2015 em 19:30
fonte usuário

votos
2

Como outros já mencionado, listas e tuplos são ambos os recipientes que podem ser utilizados para armazenar objectos pitão. As listas são extensíveis e seu conteúdo pode mudar por cessão, nas outras tuplas mão são imutáveis.

Além disso, as listas não podem ser usados ​​como chaves em um dicionário enquanto tuplas pode.

Respondeu 08/08/2008 em 07:06
fonte usuário

votos
1

(1,2,3) e [1,2,3] pode ser usado indiferentemente em condições raras.

Então, (1,2,3) é uma tupla e é imutável. Todas as alterações que deseja fazer precisa para substituir o objeto.

[1,2,3] é uma lista de elementos e pode ser acrescentado e retirado.

Lista tem mais recursos do que uma tupla.

Respondeu 31/03/2018 em 09:14
fonte usuário

votos
1

[1,2,3] é uma lista.

(1,2,3) é uma tupla e imutável.

Respondeu 08/10/2014 em 07:02
fonte usuário

votos
1

Se você puder encontrar uma solução que funciona com tuplas, usá-los, uma vez que obriga a imutabilidade que tipo de unidades que por um caminho mais funcional. Você quase nunca lamento indo para o caminho funcional / imutável.

Respondeu 08/08/2008 em 07:48
fonte usuário

votos
0

(1,2,3)é uma tupla e [1,2,3]é uma lista. Você qualquer um dos dois representam sequências de números, mas note que tuplas são imutáveis e lista são objetos Python mutáveis.

Respondeu 27/06/2016 em 20:48
fonte usuário

votos
0

(1,2,3)é um tempo tupla [1,2,3]é uma lista. Uma tupla é um objeto imutável, enquanto a lista é mutável.

Respondeu 19/02/2016 em 02:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more