l=[1,[1,[1,[1,[1]]]]]
如何使用任何内置函数将n维列表转换为单维列表python wothout?
如何上面n
维度列表为单一尺寸列表转换,而无需使用任何内置的功能。我在这里寻找逻辑。
输出应为[1,1,1,1,1]
请帮我在这
l=[1,[1,[1,[1,[1]]]]]
如何使用任何内置函数将n维列表转换为单维列表python wothout?
如何上面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]
你可以舒展的使用尝试和除了为了完成这个没有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没有任何的其内置的功能是愚蠢的,除非它是一个编程的难题。明智的办法做到这一点是:
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)
[转换多维列表到1D列表在Python](可能的复制http://stackoverflow.com/questions/2961983/convert-multi-dimensional-list-to-a-1d-list在python) – direprobs
这是一种代码高尔夫 – maxkoryukov
direprobs链接中的任何答案都可以帮助你吗?这听起来像是作业,所以你真的应该告诉我们你试过的东西。不使用内置函数做这件事并不容易。是否允许像'isinstance','type'或'len'这样的函数?怎么样的列表方法像'.append'或'.extend'? –