Skip to content Skip to sidebar Skip to footer

Why Can't I Add A Tuple To A List With The '+' Operator In Python?

Python not support adding a tuple to a list: >>> [1,2,3] + (4,5,6) Traceback (most recent call last): File '', line 1, in TypeError: can only

Solution 1:

This is not supported because the + operator is supposed to be symmetric. What return type would you expect? The Python Zen includes the rule

In the face of ambiguity, refuse the temptation to guess.

The following works, though:

a = [1, 2, 3]
a += (4, 5, 6)

There is no ambiguity what type to use here.

Solution 2:

Why python doesn't support adding different type: simple answer is that they are of different types, what if you try to add a iterable and expect a list out? I myself would like to return another iterable. Also consider ['a','b']+'cd' what should be the output? considering explicit is better than implicit all such implicit conversions are disallowed.

To overcome this limitation use extend method of list to add any iterable e.g.

l = [1,2,3]
l.extend((4,5,6))

If you have to add many list/tuples write a function

defadder(*iterables):
    l = []
    for i in iterables:
        l.extend(i)
    return l

print adder([1,2,3], (3,4,5), range(6,10))

output:

[1, 2, 3, 3, 4, 5, 6, 7, 8, 9]

Solution 3:

You can use the += operator, if that helps:

>>>x = [1,2,3]>>>x += (1,2,3)>>>x
[1, 2, 3, 1, 2, 3]

You can also use the list constructor explicitly, but like you mentioned, readability might suffer:

>>> list((1,2,3)) + list((1,2,3))
[1, 2, 3, 1, 2, 3]

Post a Comment for "Why Can't I Add A Tuple To A List With The '+' Operator In Python?"