Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python - Convert Single integer into a list

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.

like image 910
Ajay H Avatar asked Oct 01 '17 21:10

Ajay H


2 Answers

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)
like image 69
Barmar Avatar answered Nov 15 '22 21:11

Barmar


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))
like image 44
Ajax1234 Avatar answered Nov 15 '22 22:11

Ajax1234