Jestem ciekaw, dlaczego w Pythonie końcowy przecinek na liście jest prawidłową składnią i wydaje się, że Python po prostu go ignoruje:
>>> ['a','b',]
['a', 'b']
To ma sens, gdy jest to krotka od czasu ('a')
i ('a',)
są dwie różne rzeczy, ale na listach?
Odpowiedzi:
Głównymi zaletami są to, że ułatwia edycję list wielowierszowych i zmniejsza bałagan w różnicach.
Wymiana pieniędzy:
s = ['manny', 'mo', 'jack', ]
do:
s = ['manny', 'mo', 'jack', 'roger', ]
obejmuje tylko jedną linię zmiany różnicy:
s = ['manny', 'mo', 'jack', + 'roger', ]
To pokonuje bardziej mylące różnice wieloliniowe, gdy pominięto końcowy przecinek:
s = ['manny', 'mo', - 'jack' + 'jack', + 'roger' ]
Ta ostatnia różnica utrudnia dostrzeżenie, że tylko jedna linia została dodana, a druga nie zmieniła zawartości.
Zmniejsza również ryzyko zrobienia tego:
s = ['manny', 'mo', 'jack' 'roger' # Added this line, but forgot to add a comma on the previous line ]
i wyzwalanie niejawnej konkatenacji literału ciągu , generując
s = ['manny', 'mo', 'jackroger']
zamiast zamierzonego wyniku.źródło
List = "[" {Item ","} "]".
zList = "[" ({Item","}Item|)"]".
"\"item\","
dla każdego elementu niż wydrukować"\"item\""
dla każdego elementu, a następnie","
dla wszystkich elementów oprócz ostatniego.Jest to powszechna konwencja składniowa zezwalająca na końcowe przecinki w tablicy, języki takie jak C i Java pozwalają na to, a Python wydaje się przyjąć tę konwencję dla swojej struktury danych list. Jest to szczególnie przydatne podczas generowania kodu do zapełniania listy: wystarczy wygenerować sekwencję elementów i przecinków, nie ma potrzeby traktowania ostatniego jako specjalnego przypadku, który nie powinien mieć przecinka na końcu.
źródło
Pomaga wyeliminować pewien rodzaj błędu. Czasami łatwiej jest pisać listy w wielu wierszach. Ale w późniejszej konserwacji możesz chcieć zmienić rozmieszczenie elementów.
l1 = [ 1, 2, 3, 4, 5 ] # Now you want to rearrange l1 = [ 1, 2, 3, 5 4, ] # Now you have an error
Ale jeśli zezwolisz na końcowe przecinki i użyjesz ich, możesz łatwo zmienić kolejność wierszy bez wprowadzania błędu.
źródło
Krotka jest inna, ponieważ
('a')
jest rozwijana przy użyciu niejawnej kontynuacji i()
jako operatora prekendencji, podczas gdy('a',)
odwołuje się do krotki o długości 1.Twój oryginalny przykład byłby
tuple('a')
źródło
('a'),
jest ciągiem; ale chodziło mi o to, że końcowe przecinki w krotkach są znaczące, ale na listach nie wydają się być jeszcze Python je akceptuje.tuple('a')
to chyba zły przykład, bo w ogóletuple(x)
i(x,)
to nie to samo.tuple('ab') != ('ab',)
.tuple('a') == ('a',)
tylko dlatego, że'a'
jest to ciąg o długości 1.>>> ("a",) == ("a")
False>>> ("ab",) == ("ab")
False>>> ("ab", "bc",) == ("ab", "bc")
TrueGłównym powodem jest uczynienie diff mniej skomplikowanym. Na przykład masz listę:
list = [ 'a', 'b', 'c' ]
i chcesz dodać do niego kolejny element. Wtedy skończysz tak:
list = [ 'a', 'b', 'c', 'd' ]
w ten sposób diff pokaże, że dwie linie zostały zmienione, najpierw dodając ',' w linii z 'c' i dodając 'd' w ostatniej linii.
Tak więc python pozwala na kończące się znakiem „” w ostatnim elemencie listy, aby zapobiec dodatkowemu różnicowaniu, które mogłoby spowodować zamieszanie.
źródło