• [Python]更加Pythonic的多个List合并和Python的安利


    原题: https://segmentfault.com/q/1010000005904259

    问题: 倘若存在 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....
  • 相关阅读:
    AspNet WebApi 中应用fo-dicom抛出异常:No codec registered for tranfer syntax:
    Codeforces Round #261 (Div. 2)459A. Pashmak and Garden(数学题)
    Android开发之使用Web Service进行网络编程
    线段树 + 扫描线加深具体解释
    对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)
    lscript.ld 链接器脚本
    iOS 系统地图实现及定位
    Perl怎样过滤html标签
    hdu1213 How Many Tables(并查集)
    数据结构——链表
  • 原文地址:https://www.cnblogs.com/NewZi/p/a-pythonic-method-to-merge-list.html
Copyright © 2020-2023  润新知