Cómo crear una tupla con un solo elemento.

En el siguiente ejemplo, esperaría que todos los elementos fueran tuplas, ¿por qué una tupla se convierte en una cadena cuando solo contiene una sola cadena?

>>> a = [('a'), ('b'), ('c', 'd')] >>> a ['a', 'b', ('c', 'd')] >>> >>> for elem in a: ... print type(elem) ...    

Porque esos dos primeros elementos no son tuplas; son solo cuerdas. Los paréntesis no los hacen automáticamente tuplas. Debe agregar una coma después de la cadena para indicar a Python que debe ser una tupla.

 >>> type( ('a') )  >>> type( ('a',) )  

Para arreglar su código de ejemplo, agregue comas aquí:

 >>> a = [('a',), ('b',), ('c', 'd')] ^ ^ 

De los documentos de Python :

Un problema especial es la construcción de tuplas que contienen 0 o 1 elementos: la syntax tiene algunas peculiaridades adicionales para acomodarlos. Las tuplas vacías se construyen con un par de paréntesis vacíos; una tupla con un elemento se construye siguiendo un valor con una coma (no es suficiente para encerrar un solo valor entre paréntesis). Feo, pero efectivo.

Tus dos primeros ejemplos no son tuplas, son cuerdas. Las tuplas de un solo elemento requieren una coma final, como en:

 >>> a = [('a',), ('b',), ('c', 'd')] >>> a [('a',), ('b',), ('c', 'd')] 

('a') no es una tupla, sino solo una cadena.

Necesitas agregar una coma adicional al final para hacer que python tome como tuple :

 >>> a = [('a',), ('b',), ('c', 'd')] >>> a [('a',), ('b',), ('c', 'd')] >>>