>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Ambos são válidos? É preferido por algum motivo?
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Ambos são válidos? É preferido por algum motivo?
Respostas:
Parênteses rectos são listas enquanto os parênteses são tuplas .
Uma lista é mutável, o que significa que você pode alterar seu conteúdo:
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
enquanto as tuplas não são:
>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
A outra principal diferença é que uma tupla é lavável, o que significa que você pode usá-la como chave de um dicionário, entre outras coisas. Por exemplo:
>>> x = (1,2)
>>> y = [1,2]
>>> z = {}
>>> z[x] = 3
>>> z
{(1, 2): 3}
>>> z[y] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Observe que, como muitas pessoas apontaram, você pode adicionar tuplas juntas. Por exemplo:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
No entanto, isso não significa que as tuplas são mutáveis . No exemplo acima, uma nova tupla é construída adicionando as duas tuplas como argumentos. A tupla original não é modificada. Para demonstrar isso, considere o seguinte:
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
Visto que, se você construísse esse mesmo exemplo com uma lista, ytambém seria atualizado:
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
Uma diferença interessante:
lst=[1]
print lst // prints [1]
print type(lst) // prints <type 'list'>
notATuple=(1)
print notATuple // prints 1
print type(notATuple) // prints <type 'int'>
^^ instead of tuple(expected)
Uma vírgula deve ser incluída em uma tupla, mesmo que contenha apenas um único valor. por exemplo, em (1,)vez de (1).
Eles não são listas, são uma lista e uma tupla. Você pode ler sobre tuplas no tutorial do Python. Embora você possa alterar as listas, isso não é possível com as tuplas.
In [1]: x = (1, 2)
In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/user/<ipython console> in <module>()
TypeError: 'tuple' object does not support item assignment
Outra maneira entre colchetes e parênteses é que colchetes podem descrever uma compreensão da lista, por exemplo, [x for x in y]
Enquanto a sintaxe entre parênteses correspondente especifica um gerador de tupla :(x for x in y)
Você pode obter uma compreensão da tupla usando: tuple(x for x in y)
O primeiro é uma lista, o segundo é uma tupla. As listas são mutáveis, as tuplas não.
Dê uma olhada na seção Estruturas de dados do tutorial e na seção Tipos de sequência da documentação.
Itens separados por vírgula delimitados por (e )são tuples, aqueles delimitados por [e ]são lists.
:P
(e )são tuples, aqueles incluídos por [e ]são lists".
(i for i in ...)e[i for i in ...].