【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茴香豆系列】之 拍扁列表相关推荐

  1. 【Python茴香豆系列】之 PANDAS 如何遍历 DataFrame 的所有行

    [Python茴香豆系列]之 PANDAS 如何遍历 DataFrame 的所有行 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙 ...

  2. 【Python茴香豆系列】之 字典合并

    [Python茴香豆系列]之 字典合并 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢 ...

  3. 【Python茴香豆系列】之 PANDAS 修改 DataFrame 列名

    [Python茴香豆系列]之 PANDAS 修改 DataFrame 列名 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴 ...

  4. 【Python茴香豆系列】之 PANDAS 获取 DataFrame 的行数

    [Python茴香豆系列]之 PANDAS 获取 DataFrame 的行数 用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于 ...

  5. python基础系列教程——数据结构(列表、元组、字典、集合、链表)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 基本顺序存储结构--列表与元组 Python中的基本顺序存储结构是列表与元组,在操作的复杂度上和数组完全相同,其中列表是可变数据类型, ...

  6. 【Python茴香豆系列】之 如何逆序一个列表

    用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情. 这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不 敢自比孔乙己,这里搜集一些 Pytho ...

  7. python扫盲系列(5)--列表、元组、字典、集合

        特征 常见用法 不可变数据 数字=123 用于计算,没有索引:注意优先级(**>*/>not>and>or) >>> 17 % 3 # 取余  2 字 ...

  8. 【Python茴香豆系列】之 PANDAS 变更列的类型

    用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢自比孔乙己,这里搜集一些 Python ...

  9. 【Python茴香豆系列】之 PANDAS 如何根据列的值来选取 DataFrame 的行

    用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情.这让我想起鲁迅笔下的孔乙己.孔乙己对于茴香豆的茴字的四种写法颇有研究.我不敢自比孔乙己,这里搜集一些 Python ...

最新文章

  1. http 里面的post和get区别
  2. oracle更新快捷方式的错误,oracle 11g数据库启动错误总结
  3. oracle命令报01034,ORA-01034错误的解决办法-数据库专栏,ORACLE
  4. .net程序员转战android第一篇---环境部署
  5. linux内核中断向量表,中断向量表
  6. php页面采集正则,PHP simple_html_dom.php+正则 采集文章代码
  7. 火狐插件 Katalon Recorder 生成 python 等语言 代码
  8. 纯php代码进行删除数据操作
  9. 蓝桥杯省赛 2021 杨辉三角形 python
  10. 北京二手房价分析及预测
  11. 360全景倒车影像怎么看_360全景影像和倒车影像有什么区别
  12. 消息队列之kafka在虚拟机安装使用与整合springboot详解教程
  13. 2011年五一江西萍乡武功山--绿郁葱葱的连绵高山草甸,漂亮
  14. leetcode 给我上了深深的一课,被删掉所有题解后的我感动了
  15. c++四种cast的原理和用途
  16. 从“金融IT”乙方转到甲方的职场感悟
  17. ADB:通过 Wi-Fi 连接到Android设备的两种方法
  18. USB 3G卡热插拔那些事2
  19. html双击回顶部,百度/微信小程序点击按钮回到顶部(scrollTop=0)/点击拨打电话...
  20. Linux1G光口网卡状态灯不亮,电脑网卡灯不亮怎么办 电脑网卡灯不亮解决方法介绍【详解】...

热门文章

  1. sharepoint 2016 学习系列篇(5)-创建一个应用程序网站
  2. 手把手写深度学习(5)——Pytorch+RNN自动生成邓紫棋风格歌词
  3. 中国三大证券报电子版地址
  4. es 搜索推荐:Suggest
  5. 如何快速区分IaaS、PaaS 、SaaS?
  6. php模拟qq登录登录代码,PHP模拟QQ登录
  7. Atiti.大企业病与小企业病 大公司病与小公司病
  8. x10i升级android4.0,索尼爱立信X10i 将升Android 2.3系统
  9. chatterbot mysql_Chatbot Tutorial (聊天机器人制作教程) 每日更新 不断学习
  10. CTFshow phpCVE