>>> 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, y
també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 tuple
s, aqueles delimitados por [
e ]
são list
s.
:P
(
e )
são tuple
s, aqueles incluídos por [
e ]
são list
s".
(i for i in ...)
e[i for i in ...]
.