如何从列表列表中制作平面列表?
给定一个列表列表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
。
列表理解只生成一次列表,然后将每个项目(从其原始居住地复制到结果列表)也恰好复制一次。
问题内容: 我正在尝试将JSON转换为CSV文件,可用于进一步分析。我的结构存在的问题是,当我转换JSON文件时,我有很多嵌套的字典/列表。 我尝试使用pandas ,但它只会使第一级扁平化。 任何想法如何讨好整个JSON文件,以便我可以为单个(在本例中为虚拟机)条目创建到CSV文件的单行输入?我已经尝试过这里发布的几种解决方案,但是我的结果始终只是将第一级展平。 这是示例JSON(在这种情况下,
问题内容: 有什么简单的方法可以展平 进入 问题答案: 似乎您正在考虑考虑使用一定数量的cols来形成块,然后获取每个块中的元素,然后移至下一个。因此,考虑到这一点,这是一种方法- 后面的动机将在中详细讨论。 此外,要保留2D格式- 并以 直观的 3D阵列格式显示它-
本文向大家介绍在Python中将2d numpy数组展平为1d数组,包括了在Python中将2d numpy数组展平为1d数组的使用技巧和注意事项,需要的朋友参考一下 2d numpy数组是数组的数组。在本文中,我们将看到如何展平它以使元素成为一维数组。 与扁平化 numpy中的flatten函数是将2d数组转换为1D数组的直接方法。 示例 输出结果 运行上面的代码给我们以下结果- 带旅行 还有一
本文向大家介绍Python中的yield浅析,包括了Python中的yield浅析的使用技巧和注意事项,需要的朋友参考一下 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实
问题内容: 我有这样的df: 我想将df展平,所以它是一个连续的列表,如下所示: 我可以遍历行和列表,但是这样做更简单吗? 问题答案: 您可以只在DataFrame上使用: 如果希望结果为Python ,也可以添加。 编辑 如评论中所建议,建议现在使用而不是。
问题内容: 假设你有一个像这样的字典: 你将如何将其扁平化为: 问题答案: 基本上与展平嵌套列表的方式相同,只需要做额外的工作即可按键/值迭代字典,为新字典创建新键并在最后一步创建字典。