如何使用任何内置函数将n维列表转换为单维列表python wothout?

时间:2017-04-18 10:32:35

标签: python python-2.7 nested-lists

l=[1,[1,[1,[1,[1]]]]]

如何在不使用任何内置函数的情况下将上述n维度列表转换为单维度列表。我在这里寻找逻辑。

输出应为[1,1,1,1,1]

请帮我解决这个问题

4 个答案:

答案 0 :(得分:2)

使用递归函数:

In [20]: def ravel(lst):
             for i in lst:
                 if isinstance(i, list): #use  'type(i) is list' if you don't want built-in functions
                     yield from ravel(i)
                 else:
                     yield i
   ....:                 

In [21]: list(ravel(l))
Out[21]: [1, 1, 1, 1, 1]

答案 1 :(得分:2)

这是一个Python 2解决方案,它不使用任何内置函数。

与其他解决方案一样,我们使用递归。如果当前项是列表,我们将其递归到它中,从而产生对先前递归级别的任何解决方案。否则我们只是屈服于该项目。

def flatten(seq):
    for u in seq:
        try:
            for v in flatten(u):
                yield v 
        except TypeError:
            yield u

l = [1, [2, [3, [4, [5]]]]]
flat = [u for u in flatten(l)]    
print flat

<强>输出

[1, 2, 3, 4, 5]

当然,使用Python而不使用其内置函数的任何是愚蠢的,除非它适用于编程难题。明智的做法是:

def flatten(seq):
    for u in seq:
        if isinstance(u, list):
            for v in flatten(u):
                yield v
        else:
            yield u

l = [1, [2, [3, [4, [5]]]]]
flat = list(flatten(l))

在Python 3中,您可以使用yield from语法,如Kasramvd的回答所示。

def flatten(seq):
    for u in seq:
        if isinstance(u, list):
            yield from flatten(u)
        else:
            yield u

l = [1, [2, [3, [4, [5]]]]]
flat = list(flatten(l))
print(flat)

答案 2 :(得分:1)

试试这个,

l = [1,[1,[1,[1,[1]]]]]
def getAsList(l):
     r =[]
     for i in l:
        if type(i) == list:
            r.extend(getAsList(i))
        else:
           r.append(i)
     return r


print getAsList(l)

答案 3 :(得分:0)

您可以延长使用try和except,以便在没有isinstance

的情况下完成此操作
In [44]: def flatten(l, r):
     ...:     for i in l:
     ...:         try:
     ...:            i.count
     ...:            flatten(i, r)
     ...:         except:
     ...:             r.append(i)
In [46]: l=[1,[1,[1,[1,[1]]]]]
In [47]: r = []
In [48]: flatten(l,r)
In [49]: r
Out[49]: [1, 1, 1, 1, 1]