Say I have the following lists:
a = 1
b = [2,3]
c = [4,5,6]
I want to concatenate them such that I get the following:
[1,2,3,4,5,6]
I tried the usual + operator:
>>> a+b+c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'list'
This is because of the a term. It is just an integer. So I convert everything to a list:
>>> [a]+[b]+[c]
[1, [2, 3], [4, 5, 6]]
Not quite what I'm looking for.
I also tried all the options in this answer, but I get the same int error mentioned above.
>>> l = [a]+[b]+[c]
>>> flat_list = [item for sublist in l for item in sublist]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
TypeError: 'int' object is not iterable
It should be simple enough, but nothing works with that term a. Is there any way to do this efficiently? It doens't necessarily have to be pythonic.
There's nothing that will automatically treat an int as if it's a list of one int. You need to check whether the value is a list or not:
(a if type(a) is list else [a]) + (b if type(b) is list else [b]) + (c if type(c) is list else [c])
If you have to do this often you might want to write a function:
def as_list(x):
if type(x) is list:
return x
else:
return [x]
Then you can write:
as_list(a) + as_list(b) + as_list(c)
You can use itertools:
from itertools import chain
a = 1
b = [2,3]
c = [4,5,6]
final_list = list(chain.from_iterable([[a], b, c]))
Output:
[1, 2, 3, 4, 5, 6]
However, if you do not know the contents of a, b, and c ahead of time, you can try this:
new_list = [[i] if not isinstance(i, list) else i for i in [a, b, c]]
final_list = list(chain.from_iterable(new_list))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With