In the below example I would expect all the elements to be tuples, why is a tuple converted to a string when it only contains a single string?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
why is a tuple converted to a string when it only contains a single string?
a = [('a'), ('b'), ('c', 'd')]
Because those first two elements aren’t tuples; they’re just strings. The parenthesis don’t automatically make them tuples. You have to add a comma after the string to indicate to python that it should be a tuple.
>>> type( ('a') )
<type 'str'>
>>> type( ('a',) )
<type 'tuple'>
To fix your example code, add commas here:
>>> a = [('a',), ('b',), ('c', 'd')]
^ ^
From the Python Docs:
A special problem is the construction of tuples containing 0 or 1 items: the syntax has some extra quirks to accommodate these. Empty tuples are constructed by an empty pair of parentheses; a tuple with one item is constructed by following a value with a comma (it is not sufficient to enclose a single value in parentheses). Ugly, but effective.
If you truly hate the trailing comma syntax, a workaround is to pass a list to the tuple() function:
x = tuple(['a'])
Method 2
Your first two examples are not tuples, they are strings. Single-item tuples require a trailing comma, as in:
>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
Method 3
('a') is not a tuple, but just a string.
You need to add an extra comma at the end to make python take them as tuple: –
>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>>
Method 4
Came across this page and I was surprised why no one mentioned one of the pretty common method for tuple with one element. May be this is version thing since this is a very old post. Anyway here it is:
>>> b = tuple(('a'))
>>> type(b)
<class 'tuple'>
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0