作者 | zglg
来源 | Python与算法社区
原文 | Python列表生成式12个小功能,你常用哪几个?

python里[] 表示一个列表,对容器类型的数据进行运算和操作,生成新的列表最高效、快速的办法,就是列表生成式。

它优雅、简洁,值得大家多多使用!今天盘点列表生成式在工作中的主要使用场景。

入门

1

range快速生成连续列表

In [1]: a = range(11)In [2]: a
Out[2]: range(0, 11)In [3]: list(a)
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

2

对列表里面的数据进行运算后重新生成一个新的列表:

In [5]: a = range(0,11)In [6]: b = [x**2 for x in a]In [7]: b
Out[7]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3

对一个列表里面的数据筛选,只计算[0,11) 中偶数的平方:

In [10]: a = range(11)In [11]: c = [x**2 for x in a if x%2==0]In [12]: c
Out[12]: [0, 4, 16, 36, 64, 100]

4

前面列表生成式都只传一个参数x,带有两个参数的运算:

In [13]: a = range(5)In [14]: b = ['a','b','c','d','e']
In [20]: c = [str(y) + str(x) for x, y in zip(a,b)]
In [21]: c
Out[21]: ['a0', 'b1', 'c2', 'd3', 'e4']

5

结合字典,打印键值对:

In [22]: a = {'a':1,'b':2,'c':3}
In [23]: b = [k+ '=' + v for k, v in a.items()]
In [24]: b = [k+ '=' + str(v) for k, v in a.items()]
In [25]: b
Out[25]: ['a=1', 'b=2', 'c=3']

6

输出某个目录下的所有文件和文件夹的名称:

In [33]: [d for d in os.listdir('d:/summary')]
Out[33]: ['a.txt.txt', 'python-100']

7

列表中所有单词都转化为小写:

In [34]: a = ['Hello', 'World', '2019Python']In [35]: [w.lower() for w in a]
Out[35]: ['hello', 'world', '2019python']

进阶

8

将值分组:

In [36]: def bifurcate(lst, filter):...:   return [...:     [x for i,x in enumerate(lst) if filter[i] == True],...:     [x for i,x in enumerate(lst) if filter[i] == False]...:   ]...:
In [37]: bifurcate(['beep', 'boop', 'foo', 'bar'], [True, True, False, True])Out[37]: [['beep', 'boop', 'bar'], ['foo']]

9

进一步抽象例子8,根据指定函数fn 对lst 分组:

In [38]: def bifurcate_by(lst, fn):...:   return [...:     [x for x in lst if fn(x)],...:     [x for x in lst if not fn(x)]...:   ]...:In [39]: bifurcate_by(['beep', 'boop', 'foo', 'bar'], lambda x: x[0] == 'b')
Out[39]: [['beep', 'boop', 'bar'], ['foo']]

10

返回可迭代对象的差集,注意首先都把a, b用set 包装

In [53]: def difference(a, b):...:   _a, _b =set(a),set(b)...:   return [item for item in _a if item not in _b]...:...:In [54]: difference([1,1,2,3,3], [1, 2, 4])
Out[54]: [3]

11

进一步抽象10,根据函数fn 映射后选取差集,如下列表元素分别为单个元素和字典的例子:

In [61]: def difference_by(a, b, fn):...:     ...:   _b = set(map(fn, b))...:     ...:   return [item for item in a if fn(item) not in _b]...:     ...:...:In [62]: from math import floor...: difference_by([2.1, 1.2], [2.3, 3.4],floor)
Out[62]: [1.2]In [63]: difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x'])
Out[63]: [{'x': 2}]

12

过滤非重复值,结合list 的count( 统计出元素在列表中出现次数):

In [64]: def filter_non_unique(lst):...:   return [item for item in lst if lst.count(item) == 1]In [65]: filter_non_unique([1, 2, 2, 3, 4, 4, 5])
Out[65]: [1, 3, 5]

熟练操作以上12个例子,就算掌握python 中非常有用的列表生成式。

搜索进入CDA官方小程序,解锁更多新鲜资讯和优质内容,还有很多免费试听课程,不要错过哟!

c++双向列表释放_Python列表生成式12个小功能,你常用哪几个?相关推荐

  1. python列表生成式和map效率_Python列表生成式12个小功能,你常用哪几个?

    作者 | zglg来源 | Python与算法社区 []表示一个列表,对容器类型的数据进行运算和操作,生成新的列表最高效.快速的办法,就是列表生成式. 它优雅.简洁,值得大家多多使用!今天盘点列表生成 ...

  2. python列表知识点_Python列表知识点

    1.列表基础 list.append(x) 在列表的末尾添加一个元素.相当于 a[len(a):] = [x] . list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表.相 ...

  3. python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器

    一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...

  4. python列表操作程序_Python列表操作,比较常见的10个问题

    列表是比较常用的数据类型之一,本文整理了 StackOverflow 上关于列表操作被访问较多的10个问答,如果你在开发过程中遇到这些问题,不妨先思考一下如何解决. 1.迭代列表,如何访问列表下标索引 ...

  5. python列表引用_Python列表(list)的方法调用

    #list # n = [12,34,"yue"] # v = n.append(27) #增加元素,注意是在尾部增加,由于列表是可修改的,所以是在原列表中增加,与字符串存在区别 ...

  6. python列表去重_python列表去重

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:利用集合去重 # ! usrbinpython3# -*- coding ...

  7. python列表乘法运算_Python列表基本运算和元组

    成员运算符 in 我们用它来判断指定字符串是否包含某些字符,现在我们用来判断一个元素是否在一个列表中,格式为 元素 in 列表.这是一个布尔表达式,如果元素在列表中,结果为布尔值 True,反之为 F ...

  8. python列表分割_python列表分割

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! ①list从list列表下标a起取值,每次加b在取值,直到大于或等于list长度 ...

  9. python字典键值可以是元组或列表吗_Python列表、元组、字典、集合的内置使用方法...

    列表: 是一种可以存储多个值得数据容器 内容是有序的 可以存储任何数据类型 可以存储重复的元素 是可变类型(当内容发生变化时id不变) 元组: 也是一种可以存储多个值得数据容器 元组中的元素不可以被修 ...

最新文章

  1. [转][android深入学习]android窗口管理机制
  2. 嫉恨别人不如审视自己
  3. linux anacron 定时任务 计划任务
  4. PathFinding.js – 综合性的 JavaScript 路径查找库
  5. python拼写检查_Python 怎样写一个拼写检查器
  6. Android通用开发笔记和高性能安卓开发框架源码
  7. PHP版本区别5与7:性能 64位 运算符 输入类型 返回类型 匿名类;7改进1.变量存储空间2.数组结构3.函数调用机制
  8. PHP递归删除目录面试题,PHP 递归删除目录中文件
  9. c语言数据结构插入算法说明,C语言数据结构插入算法
  10. vb红绿灯自动切换_VB红绿灯程序.doc
  11. 【BZOJ4035】数组游戏,博弈论+分块乱搞
  12. BZOJ 2337 XOR和路径(概率DP)
  13. 每一次结束只是一次新的起点,深有体会。
  14. postman的基础使用
  15. javascript的模块开发方法;
  16. swift基础知识一
  17. oracle11g | 行转列
  18. 为什么快捷指令无法将媒体转换为文本_刘星文:快捷指令这个神器,让你的 iPhone 好用到飞起...
  19. 使用单链表统计英文文本单词个数
  20. Hadoop-The variance for this alert is **MB which is 20% of the **MB average (**MB is the limit)

热门文章

  1. 买房前需要注意的事项有哪些
  2. 《计算机网络》第七章:应用层(The Application Layer)
  3. php好玩的源码_PHP 经典有趣的算法
  4. 傅里叶变换@(stft和istft)
  5. CSS定位和浮动(吸顶、居中)
  6. c语言中如何存储日志,C语言解析日志,存储数据到伯克利DB
  7. UGUI字体不清楚——终极探索
  8. python2.7中没有zlib库的解决方案(zipimport.ZipImportError: can't decompress data; zlib not available)
  9. java页面跳转t赋值_java servlet 几种页面跳转的方法及传值
  10. OpenShift 4 之Knative(3) - 通过事件触发Serverless服务