如何在不使用任何内置函数的情况下将 n 维列表转换为一维列表 python?

How to convert a n dimensional list to single dimensional list python wothout using any inbuilt functions?

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

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

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

请帮我解决这个问题

使用递归函数:

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]

试试这个,

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)

您可以扩展 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]

这是一个 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 而没有 any 的内置函数是愚蠢的,除非它是为了编程难题。明智的做法是:

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))

在Python3中,可以使用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)