bal*_*lki 4 python list flatten
我有一个对象列表,其中对象可以是列表或标量.我想要一个只有标量的扁平列表.例如:
L = [35,53,[525,6743],64,63,[743,754,757]]
outputList = [35,53,525,6743,64,63,743,754,757]
Run Code Online (Sandbox Code Playgroud)
PS此问题的答案不适用于异构列表.在Python中展平浅层列表
这是一个相对简单的递归版本,它将展平任何深度的列表
l = [35,53,[525,6743],64,63,[743,754,757]]
def flatten(xs):
result = []
if isinstance(xs, (list, tuple)):
for x in xs:
result.extend(flatten(x))
else:
result.append(xs)
return result
print flatten(l)
Run Code Online (Sandbox Code Playgroud)
它可以在一行中使用 numpy
import numpy as np
np.hstack(l)
Run Code Online (Sandbox Code Playgroud)
你最终得到了一个 ndarray
array([ 35, 53, 525, 6743, 64, 63, 743, 754, 757])
Run Code Online (Sandbox Code Playgroud)
>>> data = [35,53,[525,6743],64,63,[743,754,757]]
>>> def flatten(L):
for item in L:
if isinstance(item,list):
for subitem in item:
yield subitem
else:
yield item
>>> list(flatten(data))
[35, 53, 525, 6743, 64, 63, 743, 754, 757]
Run Code Online (Sandbox Code Playgroud)
这是用于代码高尔夫目的的单行版本(看起来不太好:D)
>>> [y for x in data for y in (x if isinstance(x,list) else [x])]
[35, 53, 525, 6743, 64, 63, 743, 754, 757]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |