概  述

Python 列表推导式(list comprehension)利用其他列表创建新的列表,工作方式类似于for循环,使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。

单循环

[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

单循环+条件

0-20中所有能被3整除的数是多少

[i for i in range(20) if i%3==0]
[0, 3, 6, 9, 12, 15, 18]

多循环-2次

'ABC'和'EGF'所有可能的两两组合

[i+j for i in 'ABC' for j in 'EFG']
['AE', 'AF', 'AG', 'BE', 'BF', 'BG', 'CE', 'CF', 'CG']

多循环-3次

'ABC'、'EFG'、‘HIJ’所有可能的三三组合

[i+j+u for i in 'ABC' for j in 'EFG' for u in 'HIJ']
['AEH', 'AEI', 'AEJ', 'AFH', 'AFI', 'AFJ', 'AGH', 'AGI', 'AGJ',
'BEH', 'BEI', 'BEJ', 'BFH', 'BFI', 'BFJ', 'BGH', 'BGI', 'BGJ','CEH', 'CEI', 'CEJ', 'CFH', 'CFI', 'CFJ', 'CGH', 'CGI', 'CGJ']

多循环+单条件

首字母相同的男孩 女孩组合

girls = ['alice','bernice','clarice']
boys  = ['chris','arnold','bob','bernod']
[i+'<->'+j for i in girls for j in boys if i[0]==j[0]]
['alice<->arnold', 'bernice<->bob', 'bernice<->bernod',
'clarice<->chris']

多循环+多条件

第一个字母+第二个字母均相同

[i+'<->'+j for i in girls for j in boys if (i[0]==j[0] and i[1]==j[1])]['bernice<->bernod']

元组循环

列表可以直接循环,改成元组也是可以的,但是直接生产了迭代器

(i+'<->'+j for i in girls for j in boys if i[0]==j[0])
<generator object <genexpr> at 0x0000015413B781C8>tuples = (i+'<->'+j for i in girls for j in boys if i[0]==j[0])
for t in tuples:print(t)
alice<->arnold
bernice<->bob
bernice<->bernod
clarice<->chris

效率问题

男孩-女孩名字对的例子中,其实效率不是很高,因为程序会检测每个可能的配对。Python中有很多解决这个问题的方法,下面是其中一种比较高效的方法。

letterGirls = {}
for girl in girls:letterGirls.setdefault(girl[0],[]).append(girl)
print([i+'<->'+j for j in boys  for i in letterGirls[j[0]]])
['clarice<->chris', 'alice<->arnold', 'bernice<->bob',
'bernice<->bernod']

看看我们构建的字典长啥样

letterGirls
{'a': ['alice'], 'b': ['bernice'], 'c': ['clarice']}

注意:setdefault()方法,是字典的一个方法,类似于get()方法,如果键不存在于字典中,将会添加键并将值设为默认值。如果存在,则返回该字段的值。语法:dict.setdefault(key, default=None)


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
本站知识星球“黄博的机器学习圈子”(92416895)
本站qq群704220115。
加入微信群请扫码:

【Python基础】Python轻量级循环-列表推导式相关推荐

  1. python双重for循环 列表推导式_Python 列表推导式

    列表推导式(list comprehension)是利用其它列表创建新列表的一种方式.它的工作方式类似于for循环,例如: >>> [x*x for x in range(10)] ...

  2. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  3. 【python日用】for表达式[列表推导式]

    for表达式语法格式 [表达式 for 循环计数器 in 可迭代对象] 可以看出与普通for循环的区别有两点: 在for关键字之前定义一个表达式,该表达式通常会包含循环计数器 for表达式没有循环体, ...

  4. python if else用法_python列表推导式中使用if-else

    今天在处理自动化邮件数据时碰到数据行中包含字符串后,从hive中拿到的整数型数据自动转化成了浮点数,严重影响美观性.因此想到了用列表推导式来做转化,将其中的数字型数据全部转化为整型,而字符型数据保留原 ...

  5. 六、Python之三元表达式、列表推导式、生成器表达式

    1.三元表达式 #example1 x = 10 y = 20 res = x if x > y else y print(res) #example2 name = 'abc' res = ' ...

  6. Python(IT峰)笔记06-数据类型详解:列表,列表的定义,列表的基本运算,列表中的切片,列表中的相关函数,浅拷贝,深拷贝,列表推导式

    1.列表的定义 中括号进行定义 list函数定义 使用逗号分割 列表中的元素可以是任意类型,尽管这样很少用 lists=list() lists.append('zhangsan') lists.ap ...

  7. python基础(09)——列表,元组,字典,集合

    #列表的普通操作 lists = ['张飞','岳飞','双飞'] print(lists[0]) #访问列表的莫个元素lists[0] = '飞飞' #修改列表的某个元素 print(lists)# ...

  8. 2.1.3 列表推导式

    列表推导式可以说是Python程序开发是应用最多的技术之一,列表推导式可以使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性.另外,Python的内部实现对列表推导式做了大量优化, ...

  9. Python基础教程:列表推导式对比For循环执行效率

    如果把1-10以内的元素追加到一个新的列表表中,如果使用for循环我们可以这么做: a = [] for i in range(1,11):a.append(i) print(a) 输出结果如下: 如 ...

最新文章

  1. Git命令集十五——拉取命令
  2. mysql存储过程事务和捕获异常信息
  3. 基于Yolov5目标检测的物体分类识别及定位 -- 全过程总结
  4. oracle执行大sql,mybatis连接oracle执行sql语句出现ORA
  5. linux rpm安装简要说明
  6. html获取页面input值,javascript怎么获取input中用户输入的内容?
  7. HTML5七夕情人节表白网页制作【流星动画3D相册】HTML+CSS+JavaScript
  8. 用Linux给手机刷rec,【小白福利】手机端刷入第三方Rec,手把手教会你
  9. html psd设计图,根据PSD登陆页面设计稿切图制作HTML网页全过程
  10. 天易成网络管理系统服务器,怎样使用天易成网管软件解决远程开关机的问题
  11. 迪文屏幕T5UID3平台学习笔记零:迪文屏幕的学习和开发
  12. 电脑服务器能插无线网卡吗,windows的server版本2016,2019等添加开启无线网卡
  13. 计算机的记事本和写字板的功能,记事本和写字板有什么不同?功能上
  14. MySQL RR隔离级别解决幻读问题?
  15. 网易乌镇咖荟综述 | 2018,AI行业的兴奋与焦虑
  16. 视频是新时代的文本,微信也不得不认了!
  17. 计算机病毒教学评课,计算机病毒评课稿.doc
  18. 被印在纸币上的七大科学家
  19. 电子天平的检定和检定结果的影响因素
  20. 《文渊阁四库全书》书目

热门文章

  1. PHP使用GD库封装验证码类
  2. C++入门经典-例7.8-const对象,标准尺寸
  3. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...
  4. [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践
  5. Struts的MVC和Spring的MVC的区别
  6. Subversion 1.7 Eclipse integration in Ubuntu12(转载)
  7. python中常用模块_工作中用过的Python常用模块:(基于3.x)
  8. 如何毕业后继续白嫖知网
  9. ArcGIS Server 10.2 安装教程
  10. C语言 | 编程实现3