设为首页 - 加入收藏 巴彦淖尔网 (http://www.0478zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 解析 创业 成功 加快
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

案例详解:理解Python中的“解析式”

发布时间:2019-08-31 15:57 所属栏目:[优化] 来源:读芯术
导读:本篇文章将详细介绍解析式的基本要素及其各种形式。 Python中的解析式 解析式是允许在其他序列中构建序列的结构。Python 2.0介绍了列表解析式的概念,Python 3.0中进一步介绍了字典和集合解析式。 Pyhon中的解析式类型 为什么解析式如此强大?本文将通过一

本篇文章将详细介绍解析式的基本要素及其各种形式。

案例详解:理解Python中的“解析式”

Python中的解析式

解析式是允许在其他序列中构建序列的结构。Python 2.0介绍了列表解析式的概念,Python 3.0中进一步介绍了字典和集合解析式。

Pyhon中的解析式类型

Pyhon中的解析式类型

为什么解析式如此强大?本文将通过一个例子试着理解这一点。大家都知道Python提供了各种表达列表的方法。例如:

可以明确地将整件事写成:

  1. squares?=?[0,?1,?4,?9,?25]?

或者,编写for循环以创建列表:

  1. squares?=?[]?
  2. for?num?in?range(6):?
  3. ????squares.append(num*num)?

创建列表的另一种方法是使用单行代码。

  1. squares?=?[num*num?for?num?in?range(6)]?

上面的这个单行叫做列表解析式,是创建列表的便捷方式。它不再依赖循环并精简了代码。下一部分将深入探讨列表的概念以及Python 3中提供的其他类型的解析式。

列表解析式

列表解析式是一种以简洁的方式在Python中定义和创建列表的方法。大多数情况下,列表解析式可以仅在一行代码中创建列表,无需担心初始化列表或设置循环。

列表解析式包括以下几个部分:

列表解析式的各个部分

列表解析式的各个部分

比如说,需要找到前五个偶数的平方。如上一节所示,有两种方法可以做到这一点:使用显式的for循环或使用列表解析式。两种方法都试试看吧。

使用循环:

  1. even_squares?=?[]?
  2. >>>?for?num?in?range(11):?
  3. ...????if?num%2?==?0:?
  4. ...????????even_squares.append(num?*?num)>>>?even_squares?
  5. [0,?4,?16,?36,?64,?100]?

使用列表解析式:

  1. even_squares?=?[num?*?num?for?num?in?range(11)?if?num%2?==?0]?
  2. even_squares?
  3. [0,?4,?16,?36,?64,?100]?

如果仔细观察,可以看出只需重新排列For循环就可以创建列表解析式。

案例详解:理解Python中的“解析式”

列表解析式是Python中对集合应用的一种符号表示方法,就好像数学中用到的集合表示方法。

案例详解:理解Python中的“解析式”

与数学中集合的相似性

一起实践尝试并看一些在列表解析式帮助下创建列表的例子吧。

创造毕达哥拉斯三元数组

毕达哥拉斯三元数组由三个正整数a,b和c组成,而且a2+b2=c2。通常这样的三元数组写成(a,b,c)的形式,例如(3,4,5)。

  1. [(a,b,c)?for?a?in?range(1,30)?for?b?in?range(1,30)?for?c?in?range(1,30)if?a**2?+?b**2?==?c**2][(3,?4,?5),?(4,?3,?5),?(5,?12,?13),?(6,?8,?10),?(7,?24,?25),?(8,?6,?10),?(8,?15,?17),?(9,?12,?15),?(10,?24,?26),?(12,?5,?13),?(12,?9,?15),?(12,?16,?20),?(15,?8,?17),?(15,?20,?25),(16,?12,?20),?(20,?15,?25),(20,?21,?29),?(21,?20,?29),?(24,?7,?25),?(24,?10,?26)]?

带字符串的列表解析式

将字符串中的小写字母转换为大写字母。

  1. colors?=?["pink",?"white",?"blue",?"black",?purple"]?
  2. [color.upper()?for?color?in?colors]?
  3. ['RED',?'GREEN',?'BLUE',?'PURPLE']?

交换给定列表中的名和姓。

  1. presidents_usa?=?["George?Washington",?"John?Adams","Thomas?Jefferson","James?Madison","James?Monroe","John?Adams","Andrew?Jackson"]split_names?=?[name.split("?")?for?name?in?presidents_usa]?
  2. swapped_list?=?[split_name[1]?+?"?"?+?split_name[0]?for?split_name?in?split_names]swapped_list['Washington?George',?'Adams?John',?'Jefferson?Thomas',?'Madison?James',?'Monroe?James',?'Adams?John',?'Jackson?Andrew']?

含有元组的列表解析式

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章