Estou curioso para saber por que, em Python, uma vírgula à direita em uma lista é uma sintaxe válida, e parece que o Python simplesmente a ignora:
>>> ['a','b',]
['a', 'b']
Faz sentido quando é uma tupla desde então ('a')
e ('a',)
existem duas coisas diferentes, mas nas listas?
Respostas:
As principais vantagens são que facilita a edição de listas com várias linhas e reduz a confusão de diferenças.
Alterando:
para:
envolve apenas uma alteração de uma linha no diff:
Isso supera a diferença de várias linhas mais confusa quando a vírgula à direita foi omitida:
O último diff torna mais difícil ver que apenas uma linha foi adicionada e que a outra linha não mudou o conteúdo.
Também reduz o risco de fazer isso:
e acionando concatenação literal de cadeia implícita , produzindo em
s = ['manny', 'mo', 'jackroger']
vez do resultado pretendido.fonte
List = "[" {Item ","} "]".
vs.List = "[" ({Item","}Item|)"]".
"\"item\","
para cada item do que imprimir"\"item\""
para cada item seguido por","
todos, exceto o último item.É uma convenção sintática comum permitir vírgulas à direita em uma matriz, linguagens como C e Java, e o Python parece ter adotado essa convenção para sua estrutura de dados da lista. É particularmente útil ao gerar código para preencher uma lista: basta gerar uma sequência de elementos e vírgulas, não é necessário considerar o último como um caso especial que não deve conter vírgula no final.
fonte
Ajuda a eliminar um certo tipo de bug. Às vezes, é mais claro escrever listas em várias linhas. Mas, posteriormente, você pode reorganizar os itens.
Mas se você permitir vírgulas à direita e usá-las, poderá reorganizar facilmente as linhas sem introduzir um erro.
fonte
Uma tupla é diferente porque
('a')
é expandida usando continuação implícita()
es como um operador de precedência, enquanto('a',)
se refere a uma tupla de comprimento 1.Seu exemplo original teria sido
tuple('a')
fonte
('a'),
é uma string; mas o que quero dizer é que as vírgulas finais nas tuplas são significativas, mas nas listas elas ainda não parecem ser aceitas pelo Python.tuple('a')
provavelmente é um mau exemplo, porque em geraltuple(x)
e(x,)
não é a mesma coisa.tuple('ab') != ('ab',)
.tuple('a') == ('a',)
só porque'a'
é uma cadeia de comprimento 1.>>> ("a",) == ("a")
False>>> ("ab",) == ("ab")
False>>> ("ab", "bc",) == ("ab", "bc")
TrueO principal motivo é tornar o diff menos complicado. Por exemplo, você tem uma lista:
e você deseja adicionar outro elemento a ele. Então você acabará fazendo o seguinte:
assim, diff mostrará que duas linhas foram alteradas, adicionando primeiro ',' de acordo com 'c' e adicionando 'd' na última linha.
Portanto, o python permite rastrear ',' no último elemento da lista, para evitar diferenças extras, o que pode causar confusão.
fonte