Converting a list of lists to a single list

MRAB python at mrabarnett.plus.com
Wed Jul 24 00:52:21 CEST 2013


On 23/07/2013 22:52, steve at divillo.com wrote:
> I think that itertools may be able to do what I want but I have not been able to figure out how.
>
> I want to convert an arbitrary number of lists with an arbitrary number of elements in each list into a single list as follows.
>
> Say I have three lists:
>
> [[A0,A1,A2], [B0,B1,B2] [C0,C1,C2]]
>
> I would like to convert those to a single list that looks like this:
>
> [A0,B0,C0,C1,C2,B1,C0,C1,C2,B2,C0,C1,C2,A1,B0,C0,C1,C2,B1,C0,C1,C2,B2,C0,C1,C2,A2,B0,C0,C1,C2,B1,C0,C1,C2,B2,C0,C1,C2]
>
> An easier way to visualize the pattern I want is as a tree.
>
> A0
> 	B0
> 		C0
> 		C1
> 		C2
> 	B1
> 		C0
> 		C1
> 		C2
> 	B2
> 		C0
> 		C1
> 		C2
> A1
> 	B0
> 		C0
> 		C1
> 		C2
> 	B1
> 		C0
> 		C1
> 		C2
> 	B2
> 		C0
> 		C1
> 		C2
> A2
> 	B0
> 		C0
> 		C1
> 		C2
> 	B1
> 		C0
> 		C1
> 		C2
> 	B2
> 		C0
> 		C1
> 		C2
>
Using recursion:

def tree_list(items):
     if len(items) == 1:
         return items[0]

     sublist = tree_list(items[1 : ])

     result = []

     for item in items[0]:
         result.append(item)
         result.extend(sublist)

     return result

items = [["A0","A1","A2"], ["B0","B1","B2"], ["C0","C1","C2"]]
print(tree_list(items))




More information about the Python-list mailing list