Dans l'exemple ci-dessous, je m'attendrais à ce que tous les éléments soient des tuples, pourquoi un tuple est-il converti en chaîne alors qu'il ne contient qu'une seule chaîne?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
('a')
évalue juste à'a'
,
:a = 1, 2, 3; print a
()
, qui consiste uniquement en une paire de parenthèses.False
- à peu près tous un tuple vide est bon (si vous voyez ce que je veux dire).Réponses:
Parce que ces deux premiers éléments ne sont pas des tuples; ce ne sont que des chaînes. Les parenthèses ne font pas automatiquement d'eux des tuples. Vous devez ajouter une virgule après la chaîne pour indiquer à python qu'il doit s'agir d'un tuple.
Pour corriger votre exemple de code, ajoutez des virgules ici:
À partir de la documentation Python :
Si vous détestez vraiment la syntaxe de la virgule de fin, une solution de contournement consiste à passer un
list
à latuple()
fonction:la source
tuple
accepte un itérable , qui est une chaîne (itère sur des caractères). Si vous insistez pour ne pas utiliser la virgule de fin, puis faire une liste intermédiaire:tuple(['abc'])
.Vos deux premiers exemples ne sont pas des tuples, ce sont des chaînes. Les tuples à un seul élément nécessitent une virgule de fin, comme dans:
la source
('a')
n'est pas un tuple, mais juste une chaîne.Vous devez ajouter une virgule supplémentaire à la fin pour les faire
python
prendre commetuple
: -la source