当前位置: 首页 > news >正文

Python 进阶小技巧:7招展开嵌套列表

大家好,今天给大家讲解一个Python的进阶知识点:如何将一个嵌套的大列表展开形成一个列表。

小编提供了7种方法供大家学习参考:

  • for循环

  • 列表推导式

  • 使用第三方库itertools

  • 使用sum函数

  • python自加(+=)

  • 使用extend函数

  • 使用递归函数

技术交流

技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。

本文来自技术群粉丝分享整理,文章源码、数据、技术交流,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自CSDN +备注来意
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

模拟数据

data = [[1,2,3],[4],[5,6,7],[8,9],[10]]  # 模拟数据  data  
[[1, 2, 3], [4], [5, 6, 7], [8, 9], [10]]  

这份模拟的数据有2个特点:

  • 嵌套列表只有两层

  • 里面的元素也全部是列表类型

方式1:for循环

最容易想到的方式就是for循环:

for i in data:  print(type(i))  
<class 'list'>  
<class 'list'>  
<class 'list'>  
<class 'list'>  
<class 'list'>  
# 导入Iterable 模块  
from collections import Iterable   sum_data = []  for i in data:  if isinstance(i,Iterable):  # 如果可迭代(比如列表形式)  for j in i:  # 再次循环追加元素  sum_data.append(j)    else:  sum_data.append(i)  # 否则直接追加  sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式2:列表推导式

for循环能够实现,那么列表推导式肯定也可以:

sum_data = [i for j in data  if isinstance(j,Iterable) for i in j]  # 循环一定是从大到小  sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式3:使用itertools库

借助第三方的库itertools:

import itertools  # 通过chain方法从可迭代对象中生成;最后展开成列表  sum_data = list(itertools.chain.from_iterable(data))  
sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式4:使用sum函数

sum_data = sum(data, [])  
sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式5:Python自加

sum_data = []  for i in data:  sum_data += i  # 实现自加  sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式6:extend函数

如何快速理解python的extend函数,给个案例

# 如何理解python的extend函数  list1 = [1,2,3,4]  
list1.extend([5,6])  # 追加功能extend;就地修改  list1  # list1已经发生了变化  
[1, 2, 3, 4, 5, 6]  
sum_data = []   for i in data:  sum_data.extend(i)   # 对空列表逐步追加  sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

方式7:使用递归函数

data  
[[1, 2, 3], [4], [5, 6, 7], [8, 9], [10]]  
def flatten(data):  # 定义递归函数  sum_data = []  for i in data:  if isinstance(i, Iterable):  # 如果i是可迭代的对象(列表等),调用函数本身;直到执行else语句  sum_data.extend(flatten(i))  else:  sum_data.append(i)  return sum_data  
sum_data = flatten(data)  # 调用递归函数  
sum_data  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

后续

本文的数据有特殊点:嵌套只有两层,且里面的元素全部是列表;后面会考虑非全部列表的数据(比如列表和数字组合的嵌套列表等)和多层嵌套。

如果有更好的方法,留言区欢迎讨论交流~

相关文章:

Python 进阶小技巧:7招展开嵌套列表

大家好&#xff0c;今天给大家讲解一个Python的进阶知识点&#xff1a;如何将一个嵌套的大列表展开形成一个列表。 小编提供了7种方法供大家学习参考&#xff1a; for循环 列表推导式 使用第三方库itertools 使用sum函数 python自加&#xff08;&#xff09; 使用extend函…...

【Spring6】| Bean的作用域

目录 一&#xff1a;Bean的作用域 1. singleton&#xff08;单例&#xff09; 2. prototype&#xff08;多例&#xff09; 3. 其它scope 4. 自定义scop&#xff08;了解&#xff09; 一&#xff1a;Bean的作用域 1. singleton&#xff08;单例&#xff09; &#xff08;1…...

Qt界面美化之自定义qss样式表

原生的QT界面不好看&#xff0c;有时候需要根据美工的设计图修改样式。如果使用QML的话搞界面是快&#xff0c;但是QML有点儿吃内存&#xff0c;有时简单的功能还是用传统c的widget方便些。好在有qss&#xff0c;传统界面也可以美化的。QSS称为Qt Style Sheets也就是Qt样式表&a…...

春招进行时:“211文科硕士吐槽工资5500” HR:行情和能力决定价值

学历重要&#xff0c;还是能力重要&#xff1f; 春招进行时&#xff0c;不少学生求职遇冷&#xff0c;会把原因归结为学历水平不够高、毕业院校不够档次、专业不够热门、非一线城市就业机会少等等。 直到上海一位211大学的文科男硕士&#xff0c;吐槽招聘会提供的岗位薪资待遇…...

【DaVinci Developer专题】-45-自动生成SWC中所有Runnable对应的C文件

点击返回「Autosar从入门到精通-实战篇」总目录 案例背景(共5页精讲): 在DaVinci Developer中,以Test_A_SWC的Runnable为例,见图0-1。我们现在尝试自动生成一个包含Test_A_SWC_Init和Test_A_SWC_Main函数原型(也是适用于 C/S Port Serve Runnable)的C文件。 图0-1 目…...

redis启动和关闭服务脚本

编译安装redis&#xff0c;自己写了个脚本。 简单实现启动、关闭和 查看redis服务。 基本流程如下&#xff1a; 脚本执行&#xff0c;必须附带1个参数&#xff0c;没有参数会提示附带参数。 脚本会获取redis-server进程数量。作为开启、关闭以及查看redis服务的数据依据。 …...

windows CMD快捷键:

&#x1f431;个人主页&#xff1a;莎萌玩家&#x1f64b;‍♂️作者简介&#xff1a;全栈领域新星创作者、专注于全栈各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01;&#x1f4ab;系列专栏&#xff1a;网络爬虫、WEB全栈开发&#x1f4e2;资料领取…...

【C/C++语言】刷题|双指针|数组|单链表

主页&#xff1a;114514的代码大冒 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、删除有序数组中的重复项 二、合并两个有序数组 三&#xff0c;移除…...

Leetcode.1487 保证文件名唯一

题目链接 Leetcode.1487 保证文件名唯一 Rating &#xff1a; 1697 题目描述 给你一个长度为 n的字符串数组 names。你将会在文件系统中创建 n个文件夹&#xff1a;在第 i 分钟&#xff0c;新建名为 names[i]的文件夹。 由于两个文件 不能 共享相同的文件名&#xff0c;因此如…...

python-星号(*)-双星号(**)-函数动态参数匹配-解包操作

文章目录1.乘法和幂运算符2.函数接收数量不固定的入参3.限制函数入参仅以关键字形式输入4. 可迭代对象解包操作5.扩展可迭代对象解包1.乘法和幂运算符 ● 单个 * 用于乘法运算 ● 两个 ** 表示幂运算 >>> 2*3 >>> 6 >>> 2**3 >>> 82.函数…...

面试官:为什么说ArrayList线程不安全?

本博客知识点收录于&#xff1a;⭐️《JavaSE系列教程》⭐️ 1&#xff09;线程安全与不安全集合 我们学习集合的时候发现集合存在由线程安全集合和线程不安全集合&#xff1b;线程安全效率低&#xff0c;安全性高&#xff1b;反之&#xff0c;线程不安全效率高&#xff0c;安…...

STP详解

STP STP全称为“生成树协议”&#xff08;Spanning Tree Protocol&#xff09;&#xff0c;是一种网络协议&#xff0c;用于在交换机网络中防止网络回路产生&#xff0c;保证网络的稳定和可靠性。它通过在网络中选择一条主路径&#xff08;树形结构&#xff09;&#xff0c;并…...

linux AWK常用命令 —— 筑梦之路

搜集整理awk常用命令&#xff0c;以便使用查询 # 打印文件第一列awk {print $1} rumenz.txt# 打印文件前两列awk {print $1,$2} rumenz.txt# 打印文件最后一列awk {print $NF} rumenz.txt# 打印文件总行数awk END{print NR} rumenz.txt# 打印文件第一行awk NR1{print} rumenz.…...

SpringCloud:服务拆分及远程调用

目录 SpringCloud&#xff1a;服务拆分及远程调用 1、服务拆分 2、远程调用 SpringCloud&#xff1a;服务拆分及远程调用 SpringCloud是目前国内使用最广泛的微服务框架。 官网地址: Spring Cloud SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了…...

网络应用之javascript函数定义和调用

函数定义和调用学习目标能够写出函数的定义和调用方式1. 函数定义函数就是可以重复使用的代码块, 使用关键字 function 定义函数。<script type"text/javascript">// 函数定义function fnAlert(){alert(hello!);} </script>2. 函数调用函数调用就是函数名…...

使用VNC远程连接Ubuntu - 内网穿透实现公网远程办公

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…...

JavaScript Date 日期对象

文章目录JavaScript Date 日期对象Date 对象Date 对象属性Date 对象方法创建日期设置日期两个日期比较JavaScript Date 日期对象 日期对象用于处理日期和时间。 Date 对象 Date 对象用于处理日期与实际。 创建 Date 对象&#xff1a; new Date(). 以上四种方法同样可以创建…...

婴幼儿常见八大疾病及护理方法

在1岁之前&#xff0c;婴儿的体质还没有完全发育&#xff0c;很容易生病&#xff0c;大多数婴儿在1岁之后都会更好。今天&#xff0c;新的稀有婴儿育儿专家组织了一些婴儿最容易患的疾病和护理方法。1、新生儿黄疸宝宝出生后&#xff0c;你可能会注意到他的皮肤发黄。别担心&am…...

UVa 817 According to Bartjens 数字表达式 DFS ID 迭代加深搜 逆波兰表达式

题目链接&#xff1a;According to Bartjens 题目描述&#xff1a; 给定一个由数字和一个组成的字符串&#xff0c;你需要在数字之间添加,−,∗,-,*,−,∗三种符号&#xff0c;在保证表达式合法的情况下&#xff08;同时形成的新的数字不能有前导零&#xff09;&#xff0c;使表…...

c++基础/类和对象

c基础 2.1名字空间 namespace 防止命名冲突 说明&#xff1a;名字空间可以在全局作用域或其他作用域&#xff08;另一个名字空间&#xff09;内部定义&#xff0c;但不能在函数或类的内部定义。 使用&#xff1a; #include<iostream> using namespace std; //std中包…...

多模态AI处理利器:基于MCP协议的Stitch-Pro服务器架构解析

1. 项目概述&#xff1a;一个面向多模态内容处理的“缝合”利器 最近在折腾一个挺有意思的开源项目&#xff0c;叫 stitch-pro-mcp 。这个名字挺直白&#xff0c;“stitch”是缝合&#xff0c;“pro”是专业版&#xff0c;“mcp”则指向了“模型上下文协议”。简单来说&#…...

5分钟极简安装:免费Ghidra逆向工程工具完整配置指南

5分钟极简安装&#xff1a;免费Ghidra逆向工程工具完整配置指南 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 你是否曾因复…...

ChatGPT和Gemini聊天记录导出

AI对话记录导出技术演进&#xff1a;从碎片化到结构化管理的范式突破 一、技术革命带来的新痛点&#xff1a;AI对话资产的管理困境 在生成式AI技术日臻成熟的今天&#xff0c;开发者与AI的交互频率呈指数级增长。以ChatGPT日均处理30亿次查询、Gemini日均生成内容超2亿次的数…...

从灾难电影到现实防疫:技术视角下的系统脆弱性与韧性构建

1. 从科幻到现实&#xff1a;流行病史与灾难电影的预言性对话作为一名长期关注科技与社会交叉领域的写作者&#xff0c;我发现自己近年来越发沉迷于一种特殊的电影类型——灾难片&#xff0c;尤其是那些以病毒大流行为主题的影片。这并非单纯的娱乐消遣&#xff0c;而更像是一种…...

放心API和4SAPI怎么选?从开发者选型角度看差异

很多开发者在选 Claude API 中转站时&#xff0c;都会遇到一个问题&#xff1a;**到底是选更偏个人友好的放心API&#xff0c;还是选更偏企业级的4SAPI&#xff1f;**这个问题没有标准答案&#xff0c;只有场景答案。---## 一、先给结论如果你的项目处于以下阶段&#xff1a;- …...

地表温度反演进阶:对比单窗算法与大气校正法,用ENVI/ERDAS分析Landsat 7 ETM+数据哪个更准?

地表温度反演技术深度对比&#xff1a;单窗算法与大气校正法的实战解析 遥感技术在地表温度反演领域的应用已经发展出多种成熟算法&#xff0c;其中单窗算法和大气校正法&#xff08;RTE&#xff09;是最为常用的两种方法。对于中高级遥感用户而言&#xff0c;理解这两种算法的…...

NVIDIA Profile Inspector终极指南:200+隐藏参数解锁显卡性能新高度

NVIDIA Profile Inspector终极指南&#xff1a;200隐藏参数解锁显卡性能新高度 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款功能强大的显卡驱动参数调校工具&#xf…...

AI支付架构选型:Card Rails与Agent Rails的深度对比与实践指南

1. 项目概述&#xff1a;AI支付架构的十字路口最近在设计和落地几个AI驱动的支付系统时&#xff0c;我反复被一个核心的架构选择所困扰&#xff1a;是采用“Card Rails”还是“Agent Rails”&#xff1f;这不仅仅是技术选型&#xff0c;更是两种截然不同的产品哲学和风险控制思…...

Armv8/v9架构中的A64系统指令与预测限制机制详解

1. A64系统指令概述在Armv8/v9架构中&#xff0c;A64系统指令(System Instructions)是处理器特权级别操作的核心机制。这些指令运行在EL1及以上异常级别&#xff0c;用于控制系统寄存器、内存管理单元、虚拟化扩展和安全状态等关键功能。与常规数据处理指令不同&#xff0c;系统…...

思科EIGRP实战:从邻居建立到负载均衡的配置详解

1. EIGRP协议基础与核心机制 EIGRP&#xff08;Enhanced Interior Gateway Routing Protocol&#xff09;作为思科自主研发的动态路由协议&#xff0c;在企业级网络中有着广泛应用。我第一次接触EIGRP是在2013年帮某电商平台改造数据中心网络时&#xff0c;当时就被它独特的混合…...