您好,登录后才能下订单哦!
这篇文章主要介绍“Python列表内涵实际中的使用”,在日常操作中,相信很多人在Python列表内涵实际中的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python列表内涵实际中的使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Python列表内涵(List Comprehensions,也译作“列表推导式”)是Python***有力的语法之一,常用于从集合对象中有选择地获取并计算元素,虽然多数情况下可以使用for、if等语句组合完成同样的任务,但列表内涵书写的代码更简洁(当然有时可能会不易读)。
列表内涵的一般形式如下,我们可以把[]内的列表内涵写为一行,也可以写为多行(一般来说多行更易读)。
[表达式 for item1 in 序列1 ... for itemN in 序列N if 条件表达式]
上面的表达式分为三部分,最左边是生成每个元素的表达式,然后是for 迭代过程,最右边可以设定一个if 判断作为过滤条件。
列表内涵的一个著名例子是生成九九乘法表:
s = [(x, y, x*y) for x in range(1, 10) for y in range(1,10) if x>=y]
列表内涵可能放在函数编程一章更合适,因为它可以统一实现map和filter等高阶函数(下一章介绍)。不过我还是倾向于将它看为一种组合的流程控制语句,而且我个人感觉它与C#中的LINQ有点神似(当然LINQ更强大,可以处理数据库和XML)。下面是两个例子,一个用LINQ实现,一个用Python的列表内涵实现。
C#中用LINQ找出10以内的偶数 var s = from x in Enumerable.Range(0, 10) where x % 2 == 0 select x;
#Python中用列表内涵模拟以上LINQ语句 s = [x for x in range(0, 10) if x % 2 == 0]
当然上边的例子很简单,实际上我们可以用列表内涵完成更复杂的程序设计任务,而且效率一般会比使用for、if等的组合语句高(因为中间省略了一些列表的生成和赋值过程)。Python 2.5 之后,列表内涵进行了进一步的扩展,如果一个函数接受一个可迭代对象作为参数,那么可以给它传递一个不带中括号的列表内涵,这样就不需要一次生成整个列表,只要将可迭代对象传递给函数。
动态表达式
先布置一个思考题:在C#语言中,如果需要在文本框中输入1+2(或更复杂的数学表达式)后计算它的值,你会怎么做呢?
不怕大家笑,我在用C#解决这个问题的时候,是自己做了一个表达式解析器…………,虽然只能计算加减乘除的简单组合,但也着实费了我好大力气。后来才开始使用各种各样的第三方Parse组件,msscript等。现在我们有了Python,要完成这个任务可以说是非常简单,简单到你不敢相信:只要用内置的eval()函数,就可以计算并返回任意有效表达式的值。例如:
str = '1+2'2 print eval(str)
你还可以试验更复杂的表达式,是不是很Powerful的一项功能?
除了eval函数之外,Python还提供了exec语句将字符串str当成有效Python代码来执行,看下面的例子:
#exec.py exec 'a=100'3 print a
另外还有execfile函数,它用来执行一个外部的py文件。上一个例子存为exec.py后,运行下边的代码就知道是怎么回事了:
execfile(r'c:\exec.py')
***提醒,默认的eval(),exec,execfile()所运行的代码都位于当前的名字空间中,eval(), exec,和execfile()函数也可以接受一个或两个可选字典参数作为代码执行的全局名字空间和局部名字空间,具体可以参考Python的手册,我就不啰嗦了。
到此,关于“Python列表内涵实际中的使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。