设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-08-30 01:14 所属栏目:21 来源:读芯术
导读:本篇文章将详细介绍解析式的基本要素及其各种形式。 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组成,而且a²+b²=c²。通常这样的三元数组写成(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'] 

含有元组的列表解析式

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读