Python-在Python中展平浅表
如何从列表列表中制作平面列表?
回答:
给定一个列表列表l
,
flat_list = [item for sublist in l for item in sublist]
意思是:
flat_list = []for sublist in l:
for item in sublist:
flat_list.append(item)
比到目前为止发布的快捷方式快。(l
是要展平的列表。)
这是相应的功能:
flatten = lambda l: [item for sublist in l for item in sublist]
作为证据,你可以使用timeit
标准库中的模块:
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
说明:基于快捷方式+
(包括中的隐含使用sum)的必要性是O(L**2
)当存在L个子列表时-随着中间结果列表的长度越来越长,每一步都会分配一个新的中间结果列表对象,并且所有项目必须复制之前的中间结果中的结果(以及最后添加的一些新结果)。因此,为简单起见,并且不失去一般性,请说你每个都有I个项目的L个子列表:第一个I项目来回复制L-1次,第二个I项目L-2
次,依此类推;等等。总份数是I乘以x的总和(从1到L排除在外),即I * (L**2)/2
。
列表理解只生成一次列表,然后将每个项目(从其原始居住地复制到结果列表)也恰好复制一次。
以上是 Python-在Python中展平浅表 的全部内容, 来源链接: utcz.com/qa/422852.html