Home > Article > Backend Development > PYTHON flatten nested lists
list is the most frequently used data type in Python, and there are a wealth of functions available in the standard library.
However, if you convert a multi-dimensional list into a one-dimensional list (I don’t know if there is a lot of demand for this), it is really not easy to find a useful function.
I know that there are flatten among Ruby, Mathematica, and Groovy.
If the list has few dimensions and is regular, it is relatively easy to handle
For example:
li=[[1,2],[3,4],[5,6]] print [j for i in li for j in i] #or from itertools import chain print list(chain(*li)) #or a=[[1,2],[3,4],[5,6]] t=[] [t.extend(i) for i in a] print t #or print sum(li,[])
For more complex ones, such as: li=[1,[2],[[3]],[[4,[5],6]]], The above method is not easy to use, so we have to change it.
The structure looks like a tree, and it is easy to think of directory traversal, so we have the following method:
def flat(tree): res = [] for i in tree: if isinstance(i, list): res.extend(flat(i)) else: res.append(i) return res
Another way of thinking is that a nested list is nothing more than a lot of pairs of square brackets. A one-dimensional list only has one pair. Just remove the one in the middle and convert it to a string. Easy to handle
def flatten(seq): s=str(seq).replace('[', '').replace(']', '') #当然也可以用正则 return [eval(x) for x in s.split(',') if x.strip()]
However, this method cannot do anything when strings containing "[" or "]" appear in the list and needs to be improved.
Other methods:
I saw it on a foreign forum, it is also recursive, and it can be done in one line
flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]
The following one The method uses the Tkinter module and is the method seen on the mailing list. I guess many students don’t know that it can be done, and it can be said that it comes with Python. Note that the windows version of python comes with the Tkinter module, but Linux does not have it by default.
from Tkinter import _flatten li=reduce(lambda *x:list(x),range(2,6),[1]) print li print _flatten(li) #Out: #[[[[[1], 2], 3], 4], 5] #(1, 2, 3, 4, 5) #对元组同样适用
There are also some third-party modules that provide such functions, such as sympy, Numpy, pipe, etc.
For nested tuples, there is no need to say more, just make slight changes
The above simple implementation of PYTHON flattening nested lists is The editor has shared all the content with you. I hope it can give you a reference. I also hope that everyone will support the PHP Chinese website.
For more articles related to PYTHON flattening nested lists, please pay attention to the PHP Chinese website!