如何在不使用任何内置函数的情况下将 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)
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)