[Python]更加Pythonic的多个List合并和Python的安利
2016-07-08 09:36
309 查看
原题: https://segmentfault.com/q/1010000005904259
问题: 倘若存在 L=[ [1,2,3],[4,5,6],[7,8,9]] 这样的列表,如何把合并成[1,2,3,4,5,6,7,8,9]呢?
这种方法由标准库提供,显然是更有效率,更加简洁的.
注: * 操作符是起到一个参数列表解包的作用
方法3则是发挥Python的优点,毕竟Pythonic是每个Python程序员的目标,也是这个语言吸引人的地方.
其实发这篇文章主要是顺带安利下Python, 一段Pythonic的代码具有很好的观赏性, Python也提供了很多Pythonic的特性.
例如 上面提到的 LIst Comprehension 的方法来构造一个序列(列表,元组,字典), 其他语言要实现的话一般就要用lambda表达式,
个人而言是排斥lambda表达式的, 可读性方面它不如直接定义函数,而且也缺少对称性的优美.
再例如Python 的Slice(切片),也是一个很有用,很优美的技巧.
最经典的字符串反转, python可以这样写
间隔抽样可以这样写
问题: 倘若存在 L=[ [1,2,3],[4,5,6],[7,8,9]] 这样的列表,如何把合并成[1,2,3,4,5,6,7,8,9]呢?
最直接的方法(By:松林)
ret = [] for x in L: ret += x print(x)
使用标准库中的itertools模块(By:dokelung)
from itertools import chain lst = list(chain(*L))
这种方法由标准库提供,显然是更有效率,更加简洁的.
注: * 操作符是起到一个参数列表解包的作用
有没有一种更加Pythonic的方法,但又不使用标准库?
答案是当然有,我们可以利用 List Comprehension 这个python中非常好用的技巧myList = [x for j in L for x in j]
总结
三个解决方法中,方法1是最直接的方案, 方法2利用了已有的标准库,一般情况有更好的效率.方法3则是发挥Python的优点,毕竟Pythonic是每个Python程序员的目标,也是这个语言吸引人的地方.
其实发这篇文章主要是顺带安利下Python, 一段Pythonic的代码具有很好的观赏性, Python也提供了很多Pythonic的特性.
例如 上面提到的 LIst Comprehension 的方法来构造一个序列(列表,元组,字典), 其他语言要实现的话一般就要用lambda表达式,
个人而言是排斥lambda表达式的, 可读性方面它不如直接定义函数,而且也缺少对称性的优美.
再例如Python 的Slice(切片),也是一个很有用,很优美的技巧.
最经典的字符串反转, python可以这样写
s = "Hello, World!" print(s[::-1]) # 具体解释可以看python文档,这里利用的是使步长为-1
间隔抽样可以这样写
L = [1,2,3,4,5........] print(L[::3]) #3 为步进长度,可以取出1,4,7....
相关文章推荐
- Ubuntu16.04的Python virtualenv问题
- (转)Python编程语言的发展简史
- Python: 什么是*args和**kwargs
- 调用 WinSCP 下载远程服务器文件 Python
- Python 装饰器补充
- Python Requests库简明使用教程
- Python中使用platform模块获取系统信息的用法教程
- Python中的FTP通信模块ftplib的用法整理
- 使用Python读写及压缩和解压缩文件的示例
- Python常用的内置序列结构(列表、元组、字典)学习笔记
- Python遍历目录中的所有文件的方法
- 使用PyInstaller将Python程序文件转换为可执行程序文件
- Python中多线程的创建及基本调用方法
- Python信息采集器使用轻量级关系型数据库SQLite
- Python实现PageRank算法
- python中的异常处理
- Python格式字符串两种方法比较
- 配置VIM-将VIM打造成为强大的IDE
- python3关于urllib中urlopen报错问题的解决
- python总结