【Python茴香豆系列】之 拍扁列表
【Python茴香豆系列】之 拍扁列表
用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。这让我想起鲁迅笔下的孔乙己。孔乙己对于茴香豆的茴字的四种写法颇有研究。我不敢自比孔乙己,这里搜集一些 Python 的茴香豆,以飨各位码农。
假设有一个列表:source_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
,要求把这个列表拍扁,变成:[1, 2, 3, 4, 5, 6, 7, 8, 9]
。
这里我们先做一点准备工作:
import functools
import itertools
import numpy
import operatorsource_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
茴香豆一: for for
如果第一次面对这种问题,可能首先想到的就是 for ,基本的思路如下:
>>> flatten_list = []
>>> for sublist in source_list:
>>> for item in sublist:
>>> flatten_list.append(item)
>>> flatten_list
[1, 2, 3, 4, 5, 6, 7, 8, 9]
嗯,工作完成。
当然,如果你熟悉列表的推导的话,上面的一堆可以浓缩成:
[item for sublist in source_list for item in sublist]
茴香豆二: sum
python 有一个内置函数 sum ,这个函数本来是用来给我们做算术的,恰巧列表也是可以求和的,因此下面这句也能用:
sum(source_list, [])
numpy 也有类型的功能的 sum ,效果相同:
numpy.sum(numpy.array(source_list, dtype=object))
茴香豆三: numpy
numpy 还有专业拼接数组的工具,可以用来大炮打蚊子:
list(numpy.concatenate(source_list))
茴香豆四: numpy
多个东东变成一个东东,这不能不让我怀念起 reduce 的好:
functools.reduce(lambda x,y: x+y, source_list)
functools.reduce(operator.concat, source_list)
functools.reduce(operator.iconcat, source_list, [])
殊途同归,以上三条语句实现了同样的效果。
茴香豆五: chain
遇到列表的问题,高手们一般会亮出 chain ,以区别于一般俗手:
list(itertools.chain(*source_list))
list(itertools.chain.from_iterable(source_list))
茴香豆六: flatten
最后,请大家不要小看这个问题,但凡玩列表的,估计总有一天会遇到这个问题,不然前辈高人不会造这么多轮子的:
from pandas.core.common import flatten
list(flatten(source_list))from matplotlib.cbook import flatten
list(flatten(source_list))from setuptools.namespaces import flatten
list(flatten(source_list))
【Python茴香豆系列】之 拍扁列表相关推荐
- 【Python茴香豆系列】之 PANDAS 如何遍历 DataFrame 的所有行
[Python茴香豆系列]之 PANDAS 如何遍历 DataFrame 的所有行 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙 ...
- 【Python茴香豆系列】之 字典合并
[Python茴香豆系列]之 字典合并 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢 ...
- 【Python茴香豆系列】之 PANDAS 修改 DataFrame 列名
[Python茴香豆系列]之 PANDAS 修改 DataFrame 列名 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴 ...
- 【Python茴香豆系列】之 PANDAS 获取 DataFrame 的行数
[Python茴香豆系列]之 PANDAS 获取 DataFrame 的行数 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于 ...
- python基础系列教程——数据结构(列表、元组、字典、集合、链表)
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 基本顺序存储结构--列表与元组 Python中的基本顺序存储结构是列表与元组,在操作的复杂度上和数组完全相同,其中列表是可变数据类型, ...
- 【Python茴香豆系列】之 如何逆序一个列表
用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情. 这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不 敢自比孔乙己,这里搜集一些 Pytho ...
- python扫盲系列(5)--列表、元组、字典、集合
特征 常见用法 不可变数据 数字=123 用于计算,没有索引:注意优先级(**>*/>not>and>or) >>> 17 % 3 # 取余 2 字 ...
- 【Python茴香豆系列】之 PANDAS 变更列的类型
用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢自比孔乙己,这里搜集一些 Python ...
- 【Python茴香豆系列】之 PANDAS 如何根据列的值来选取 DataFrame 的行
用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢自比孔乙己,这里搜集一些 Python ...
最新文章
- http 里面的post和get区别
- oracle更新快捷方式的错误,oracle 11g数据库启动错误总结
- oracle命令报01034,ORA-01034错误的解决办法-数据库专栏,ORACLE
- .net程序员转战android第一篇---环境部署
- linux内核中断向量表,中断向量表
- php页面采集正则,PHP simple_html_dom.php+正则 采集文章代码
- 火狐插件 Katalon Recorder 生成 python 等语言 代码
- 纯php代码进行删除数据操作
- 蓝桥杯省赛 2021 杨辉三角形 python
- 北京二手房价分析及预测
- 360全景倒车影像怎么看_360全景影像和倒车影像有什么区别
- 消息队列之kafka在虚拟机安装使用与整合springboot详解教程
- 2011年五一江西萍乡武功山--绿郁葱葱的连绵高山草甸,漂亮
- leetcode 给我上了深深的一课,被删掉所有题解后的我感动了
- c++四种cast的原理和用途
- 从“金融IT”乙方转到甲方的职场感悟
- ADB:通过 Wi-Fi 连接到Android设备的两种方法
- USB 3G卡热插拔那些事2
- html双击回顶部,百度/微信小程序点击按钮回到顶部(scrollTop=0)/点击拨打电话...
- Linux1G光口网卡状态灯不亮,电脑网卡灯不亮怎么办 电脑网卡灯不亮解决方法介绍【详解】...
热门文章
- sharepoint 2016 学习系列篇(5)-创建一个应用程序网站
- 手把手写深度学习(5)——Pytorch+RNN自动生成邓紫棋风格歌词
- 中国三大证券报电子版地址
- es 搜索推荐:Suggest
- 如何快速区分IaaS、PaaS 、SaaS?
- php模拟qq登录登录代码,PHP模拟QQ登录
- Atiti.大企业病与小企业病 大公司病与小公司病
- x10i升级android4.0,索尼爱立信X10i 将升Android 2.3系统
- chatterbot mysql_Chatbot Tutorial (聊天机器人制作教程) 每日更新 不断学习
- CTFshow phpCVE