如何更简洁地编写用于扁平化嵌套列表的代码
How to write a code for a flattening of nested lists more concisely
我在一个列表中有一组嵌套列表。
想想这样的数据:
numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]
这完全符合我的要求。但是,它看起来很乱,我相信有更好的方法来做到这一点。谁能帮我格式化这段代码?
list(chain(*chain(*(chain.from_iterable([numberlist1, numberlist2])))))
原创的常用写法:
list(chain.from_iterable(chain.from_iterable(chain(numberlist1, numberlist2))))
创建一个更短的别名:
flat = chain.from_iterable
list(flat(flat(chain(numberlist1, numberlist2))))
列表理解——如果你能选择有意义的名字,效果最好:
[c for a in chain(numberlist1, numberlist2) for b in a for c in b]
f u n c t i o n a l
def repeat(count, f):
def g(x):
for i in range(count):
x = f(x)
return x
return g
list(repeat(3, flat)((numberlist1, numberlist2)))
使用 more_itertools.collapse
缩短:
给定
import more_itertools as mit
nlst1 = [[[1, 2]]]
nlst2 = [[[1, 3]]]
代码
list(mit.collapse(nlst1 + nlst2))
# [1, 2, 1, 3]
more_itertools
是第三方包。通过 > pip install more_itertools
.
安装
我在一个列表中有一组嵌套列表。
想想这样的数据:
numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]
这完全符合我的要求。但是,它看起来很乱,我相信有更好的方法来做到这一点。谁能帮我格式化这段代码?
list(chain(*chain(*(chain.from_iterable([numberlist1, numberlist2])))))
原创的常用写法:
list(chain.from_iterable(chain.from_iterable(chain(numberlist1, numberlist2))))
创建一个更短的别名:
flat = chain.from_iterable
list(flat(flat(chain(numberlist1, numberlist2))))
列表理解——如果你能选择有意义的名字,效果最好:
[c for a in chain(numberlist1, numberlist2) for b in a for c in b]
f u n c t i o n a l
def repeat(count, f):
def g(x):
for i in range(count):
x = f(x)
return x
return g
list(repeat(3, flat)((numberlist1, numberlist2)))
使用 more_itertools.collapse
缩短:
给定
import more_itertools as mit
nlst1 = [[[1, 2]]]
nlst2 = [[[1, 3]]]
代码
list(mit.collapse(nlst1 + nlst2))
# [1, 2, 1, 3]
more_itertools
是第三方包。通过 > pip install more_itertools
.