W poniższym przykładzie spodziewałbym się, że wszystkie elementy będą krotkami, dlaczego krotka jest konwertowana na ciąg, gdy zawiera tylko jeden ciąg?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
('a')
po prostu'a'
,
:a = 1, 2, 3; print a
()
, która składa się tylko z pary nawiasów.False
- prawie cała pusta krotka jest dobra (jeśli rozumiesz, o co mi chodzi).Odpowiedzi:
Ponieważ te dwa pierwsze elementy nie są krotkami; to tylko struny. Nawiasy nie tworzą automatycznie krotek. Musisz dodać przecinek po ciągu, aby wskazać Pythonowi, że powinien to być krotka.
Aby naprawić przykładowy kod, dodaj tutaj przecinki:
Z dokumentów Python :
Jeśli naprawdę nienawidzę składnię spływu przecinek, obejście jest przekazać
list
dotuple()
funkcji:źródło
tuple
akceptuje iterowalne , którymi jest ciąg (iteruje po znakach). Jeśli nalegać na nie za pomocą przecinka tylną, a następnie dokonać listę pośredni:tuple(['abc'])
.Twoje pierwsze dwa przykłady nie są krotkami, są łańcuchami. Krotki jednoelementowe wymagają końcowego przecinka, jak w:
źródło
('a')
nie jest krotką, ale tylko łańcuchem.Musisz dodać dodatkowy przecinek na końcu, aby
python
wziąć je jakotuple
: -źródło