首页 > 其他分享 >如何将一个列表的列表转换为扁平列表?

如何将一个列表的列表转换为扁平列表?

时间:2023-10-11 23:23:47浏览次数:32  
标签:转换 嵌套 list sublist 展平 列表 item 扁平

内容来自 DOC https://q.houxu6.top/?s=如何将一个列表的列表转换为扁平列表?

我有一个列表的列表,如下所示:

[
    [1, 2, 3],
    [4, 5, 6],
    [7],
    [8, 9]
]

如何将其展平以获得 [1, 2, 3, 4, 5, 6, 7, 8, 9]


如果您的列表的列表来自嵌套的列表推导式,可以通过修复推导式更简单/直接地解决问题;请参阅 如何从列表推导式中获得扁平结果而不是嵌套列表?

这里最常见的解决方案通常只展平一层嵌套的列表。有关完全展平深层嵌套结构(通常以递归方式)的解决方案,请参阅 Flatten an irregular (arbitrarily nested) list of lists


给定一个列表的列表 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 是要展平的列表。)

这是相应的函数:

def flatten(l):
    return [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 中隐含的使用)在有 L个子列表时必然是 O(L**2)。因为中间结果列表的长度不断增加,每一步都会分配一个新的中间结果列表对象,并且之前的所有中间结果都必须被复制(以及在末尾添加一些新项)。因此,为了简化起见,不考虑实际的损失概括,假设你有 L个子列表,每个子列表包含 I 个项目:前 I 个项目需要来回 L-1 次复制,接下来的 I 个项目需要 L-2 次复制,依此类推;总的复制次数是 I 乘以从 1 到 L 的 x 的和,即 I * (L**2)/2

列表推导式只生成一次列表,并恰好将每个项目复制一次(从其原始位置传输到结果列表)。

标签:转换,嵌套,list,sublist,展平,列表,item,扁平
From: https://www.cnblogs.com/xiaomandujia/p/17758485.html

相关文章

  • 【环境搭建】phpstudy显示目录列表
      问题来源新版本的PHPStudy访问127.0.0.1不再像以前版本一样显示目录列表了解决办法打开vhosts.conf将图中标记出来的一行OptionsFollowSymLinksExecCGI改成Options+Indexes+FollowSymLinks+ExecCGI重启Apache后访问即可。 分类: 环境搭建......
  • 笨办法学Python3 习题32 循环和列表
    知识点:for i in y: #for循环开始i变量就被创建,所以不用提前创建只有在for循环里有效range(,)函数会从第一个数到最后一个之前的数,不包含最后一个数Y.append(X)将X追加到列表Y的尾部1the_count=[1,2,3,4,5]#创建3个列表变量2fr......
  • python列表中的元素按照自身某个索引的元素排序
    title:aliases:-python列表按元素排序tags:-Python/数据处理category:stars:url:creation-time:2023-07-3115:26modification-time:#!/usr/bin/python#-*-coding:UTF-8-*-#获取列表的第二个元素deftakeSecond(elem):returnelem[1]#列表r......
  • 微信小程序商城分类滚动列表锚点(左菜单右列表)
    1、TestScroll.wxml<viewclass="content-box"><!--左侧分类--><scroll-viewscroll-yscroll-with-animationclass="left"style="width:245rpx;height:100%;background:#f2f2f2;"scroll-into-view='{{leftId}}&#......
  • 使用mapstruct做对象属性转换
    MapStruct是一个Java注解处理器,它可以自动生成类型安全的JavaBean映射代码。MapStruct的主要目的是简化JavaBean之间的映射,它通过注解来指定JavaBean之间的映射规则,然后自动生成映射代码。在MapStruct中,有几个常用的注解:@Mapper:用于指定一个JavaBean映射器接口,该接口定义......
  • 第三章:列表
    点击查看代码#列表bicycles=['trek','cannodale','redline','specialized']print(bicycles)#访问元素print(bicycles[0].title())#第一个print(bicycles[-1].title())#倒数第一个print(f"Mybicycleisa{bicycles[-2].title(......
  • .net 关于在program中使用AddNewtonsoftJson之后,继承于System.Text.Json.Serializatio
    首先,先说遇见的问题与代码示例,在.net代码中注册了如下代码.AddNewtonsoftJson(option=>{//使用本地时区option.SerializerSettings.DateTimeZoneHandling=DateTimeZoneHandling.Local;......
  • 日期格式转换异常:Java 8 date/time type `java.time.LocalDateTime` not supported by
    异常信息:"unexpectederror:Typedefinitionerror:[simpletype,classjava.time.LocalDateTime];nestedexceptioniscom.fasterxml.jackson.databind.exc.InvalidDefinitionException:Java8date/timetype`java.time.LocalDateTime`notsupportedbydefault:......
  • 解决前端传递Date类型时自动转换为国际时间的问题
    本质原因是前端对象中使用了Data类型的属性字段,在向后端传递时会自动将JSON对象转换为JSON字符串进行传递Date类型的属性在进行转换时会调用自身的toJSON方法,转换为国际时间的字符串表达形式letdate=newDate();console.log(date);console.log(JSON.stringify(date));导......
  • DTD列表
    1.DTD为英文DocumentTypeDefinition,中文意思为“文档类定义”。DTD肩负着两重任务:一方面它帮助你编写合法的代码,另一方面它让浏览器正确地显示代码。2.一个DTD应该放在每一个文档的第一行(包括空白).这样正确地放置,你的DTD才能告诉浏览器的用的是什么标......