5.Loops and List Comprehensions

Loops

循环是一种重复执行某些代码的方法。

[1]

planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
for planet in planets:print(planet, end=' ') # print all on same line
Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune 

注意for循环的简单性:我们指定我们想要使用的变量,我们想要循环的序列,并使用“in”关键字以直观和可读的方式将它们链接在一起。

“in”右侧的对象可以是支持迭代的任何对象。 基本上,如果它可以被认为是一个序列或事物的集合,可以循环它。 除了列表,我们也可以迭代元组中的元素:

[2]

multiplicands = (2, 2, 2, 3, 3, 5)
product = 1
for mult in multiplicands:product = product * mult
product
360

甚至还可以迭代字符串中的每个字母:

[3]

s = 'steganograpHy is the practicE of conceaLing a file, message, image, or video within another fiLe, message, image, Or video.'
msg = ''
# print all the uppercase letters in s, one at a time
for char in s:if char.isupper():print(char, end='')     
HELLO

range()

range()是一个返回数字序列的函数。 事实证明,编写循环非常有用。

例如,如果我们想重复一些动作5次:

[4]

for i in range(5):print("Doing important work. i =", i)
Doing important work. i = 0
Doing important work. i = 1
Doing important work. i = 2
Doing important work. i = 3
Doing important work. i = 4

你可能认为range(5)返回列表[] 1,  2, 3,  4,  5] ,真是情况有点复杂。

[5]

r = range(5)
r
range(0, 5)

range返回“range object”。 它的行为很像列表(它是可迭代的),但不具备所有相同的功能。 正如我们在上一个教程中看到的那样,我们可以在像r这样的对象上调用help()来查看该对象的Python文档,包括它的所有方法。 

[6]

help(range)

就像我们可以使用int(),float()和bool()将对象转换为另一种类型一样,我们可以使用list()将类似列表的东西转换为列表,这表示更熟悉(和有用) 的表示:

[7]

list(range(5))
[0, 1, 2, 3, 4]

请注意,范围从零开始,按照惯例,范围的顶部 不包括在输出中。 range(5)给出0到5但不包括5的数字。

这可能看起来像是一种奇怪的方式,但文档(通过help(range))提到的原因是:

range(4)产生0,1,2,3。这些正是4个元素列表的有效索引。
因此对于任何列表L,for i in range(len(L)):将迭代其所有有效索引。

[8]

nums = [1, 2, 4, 8, 16]
for i in range(len(nums)):nums[i] = nums[i] * 2
nums
[2, 4, 8, 16, 32]

这是通过索引迭代列表或其他序列的经典方法。

另外:for i in range(len(L)):类似于其他语言中的for (int i = 0; i < L.length; i++)

enumerate

for foo in x 通过元素循环遍历列表,而for i in range(len(x))通过索引循环遍历列表。 如果你想两个都做怎么办?

输入枚举函数,这是Python隐藏的宝石之一:

[9]

def double_odds(nums):for i, num in enumerate(nums):if num % 2 == 1:nums[i] = num * 2x = list(range(10))
double_odds(x)
x
[0, 2, 2, 6, 4, 10, 6, 14, 8, 18]

给定一个列表,枚举返回一个对象,该对象通过列表的值和索引进行迭代。

(与range()函数一样,它返回一个可迭代对象。要将其内容作为列表查看,我们可以在其上调用list()。)

[10]

list(enumerate(['a', 'b']))[(0, 'a'), (1, 'b')]

我们可以看到,我们迭代的东西是元组。 这有助于解释for i,num语法。 我们正在“解包”元组,就像上一个教程中的示例一样:

[11]

x = 0.125
numerator, denominator = x.as_integer_ratio()

我们可以在迭代元组集合时使用这种解包语法。

[12]

nums = [('one', 1, 'I'),('two', 2, 'II'),('three', 3, 'III'),('four', 4, 'IV'),
]for word, integer, roman_numeral in nums:print(integer, word, roman_numeral, sep=' = ', end='; ')
1 = one = I; 2 = two = II; 3 = three = III; 4 = four = IV; 

这与下面的代码等价:

[13]

for tup in nums:word = tup[0]integer = tup[1]roman_numeral = tup[2]print(integer, word, roman_numeral, sep=' = ', end='; ')
1 = one = I; 2 = two = II; 3 = three = III; 4 = four = IV; 

while loops

Python中另一类循环是while循环:

[14]

i = 0
while i < 10:print(i, end=' ')i += 1
0 1 2 3 4 5 6 7 8 9

while循环的参数被计算为布尔语句,并且直到语句求值为False时停止循环。

List comprehensions

列表解析是Python中最受欢迎和独特的功能之一,理解它的最简单的方式就是看一下例子:

[15]

squares = [n**2 for n in range(10)]
squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这里有一个不用列表解析的例子,效果是一样的:

[16]

squares = []
for n in range(10):squares.append(n**2)
squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

我们也增加if条件:

[17]

short_planets = [planet for planet in planets if len(planet) < 6]
short_planets
['Venus', 'Earth', 'Mars']

(如果您熟悉SQL,可能会将其视为“WHERE”子句)

以下是使用if条件进行过滤并对循环变量应用某些变换的示例:

[18]

# str.upper() returns an all-caps version of a string
loud_short_planets = [planet.upper() + '!' for planet in planets if len(planet) < 6]
loud_short_planets
['VENUS!', 'EARTH!', 'MARS!']

人们通常把这些写在一行里,但是如果分成3行来写,结果会变得很清晰:

[19]

[planet.upper() + '!' for planet in planets if len(planet) < 6
]
['VENUS!', 'EARTH!', 'MARS!']

继续SQL类比,您可以将这三行视为SELECT,FROM和WHERE

左边的表达式在技术上不必涉及循环变量(尽管它不是很常见)。 您认为以下表达式将做什么? 

[20]

[32 for planet in planets]

列表解析与我们看到的一些函数(如min,max,sum,len和sorted)相结合,可以为一些问题提供一些令人印象深刻的单行解决方案,否则这些问题需要几行代码。

例如,最后一个练习包括一个脑力激荡器,要求你编写一个函数来计算列表中的负数,而不使用循环(或我们没有看到的任何其他语法)。 现在我们可以解决问题,因为我们的武器库中有循环:

[21]

def count_negatives(nums):"""Return the number of negative numbers in the given list.>>> count_negatives([5, -1, -2, 0, 3])2"""n_negative = 0for num in nums:if num < 0:n_negative = n_negative + 1return n_negative

这有一个使用列表解析的办法:

[22]

def count_negatives(nums):return len([num for num in nums if num < 0])

很好吧?

好吧,如果我们关心的是最小化代码的长度,那么第三种解决方案仍然更好!

[23]

def count_negatives(nums):# Reminder: in the "booleans and conditionals" exercises, we learned about a quirk of # Python where it calculates something like True + True + False + True to be equal to 3.return sum([num < 0 for num in nums])

这些解决方案中哪一个是“最好的”完全是主观的。 使用较少的代码解决问题总是很好,但值得记住以下来自The Zen of Python的内容:

  • 可读性很重要。
  • 显式优于隐式。

count_negatives的最后一个定义可能是最短的,但阅读代码的其他人是否理解它是如何工作的?

编写Pythonic代码并不意味着永远不会使用for循环!

Your turn!

转到练习笔记本,进行循环和列表解析的练习。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【牛客 - 696D】小K的雕塑(dp,鸽巢原理,01背包类问题)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/696/D 来源&#xff1a;牛客网 小K有n个雕塑&#xff0c;每个雕塑上有一个整数 若集合T中的每一个元素在n个雕塑上都能找得到&#xff0c;则称这个集合为一个优秀的集合 小K想知道所有大小<k优秀…

计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计

重点大学计算机专业系列教材汇编语言程序设计语音编辑锁定讨论上传视频本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;《重点大学计算机专业系列教材汇编语言程序设计》是2009年10月1日清华大学出版社出版…

6.Strings and Dictionaries

目录 Strings 1. String syntax 2、Strings are sequences 3、String methods Strings Python语言真正发挥作用的一个地方是字符串的操作。 本节将介绍Python的一些内置字符串方法和格式化操作。 这种字符串操作模式经常出现在数据科学工作中&#xff0c;并且在这种情况下…

【LightOJ - 1123】Trail Maintenance(在线维护最小生成树,删边思维)

题干&#xff1a; Tigers in the Sunderbans wish to travel freely among the N fields (numbered from 1 to N), even though they are separated by trees. The tigers wish to maintain trails between pairs of fields so that they can travel from any field to any ot…

7.Working with External Libraries

在本课中&#xff0c;我将讨论Python中的imports&#xff0c;提供一些使用不熟悉的库&#xff08;以及它们返回的对象&#xff09;的技巧&#xff0c;并深入研究Python的内容&#xff0c;以及谈谈运算符重载。 Imports 到目前为止&#xff0c;我们已经讨论了内置于该语言的类…

计算机原理期中考试,计算机组成原理期中考试试题

一、单选题(每小题2分&#xff0c;共34分)1&#xff0e;完整的计算机系统应包括__________。A&#xff0e;运算器、存储器、控制器 B&#xff0e; 主机和实用程序C&#xff0e;配套的硬件设备和软件系统 D&#xff0e; 外部设备和主机2&#xff0e;下列数中真值最小的数是_____…

【HDU - 1839】Delay Constrained Maximum Capacity Path(最短路 + 二分)

题干&#xff1a; 考虑一个包含 N 个顶点的无向图&#xff0c;编号从 1 到 N&#xff0c;并包含 M 条边。编号为 1 的顶点对应了一个矿藏&#xff0c;可从中提取珍稀的矿石。编号为 N 的顶点对应了一个矿石加工厂。每条边有相应的通行时间 (以时间单位计)&#xff0c;以及相应…

0.Overview

本文为Kaggle Learn的Python课程的中文翻译&#xff0c;原文链接为&#xff1a;https://www.kaggle.com/learn/python 欢迎来到Kaggle Learn的Python课程。本课程将介绍在开始使用Python进行数据科学之前需要的基本Python技能。这些课程针对那些具有一些编程经验的人&#xff…

量子计算机的体积有多大,量子计算机也能实现摩尔定律

原标题&#xff1a;量子计算机也能实现摩尔定律量子计算机拥有很强大的计算力&#xff0c;但是这对IBM来说&#xff0c;似乎还不够。据CNET消息&#xff0c;IBM制作了一个路线图&#xff0c;表达出了自己在量子计算领域的野心。IBM在图表的纵轴上列出了一个单位“量子体积(Quan…

1.How Models work

Introduction 我们首先概述机器学习模型如何工作以及如何使用它们。如果您之前已完成统计建模或机器学习&#xff0c;这可能会感觉很基础。别担心&#xff0c;我们很快就会建立强大的模型。 本课程将为您构建以下场景的模型&#xff1a; 你的堂兄已经花了数百万美元预测房地产…

【BZOJ - 1059】矩阵游戏(二分图匹配,建图,最小边覆盖)

题干&#xff1a; 小Q是一个非常聪明的孩子&#xff0c;除了国际象棋&#xff0c;他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N *N黑白方阵进行&#xff08;如同国际象棋一般&#xff0c;只是颜色是随意的&#xff09;。每次可以对该矩阵进行两种操作&#xff…

ji计算机一级题库,全国计算机等级考试一级题库0l0ji.doc

全国计算机等级考试一级题库0l0ji全国计算机等级考试一级题库(1)1&#xff0e;微机中1K字节表示的二进制位数是( )。D?   A、1000   B、8x1000   C、1024   D、8x1024??2&#xff0e;计算机硬件能直接识别和执行的只有( )。D?   A、高级语言   B、符号语言   …

2.Explore Your Data

Using Pandas to Get Familiar With Your Data 任何机器学习项目的第一步都是熟悉数据。 您将使用Pandas库。 Pandas是科学家用于挖掘和处理数据的主要工具。 大多数人在他们的代码中将pandas缩写为pd。 我们使用如下命令执行此操作。 [1] import pandas as pd Pandas库中最…

【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)

题干&#xff1a; The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. The Borg collective is the term used to describe the group consciousness of the Borg civilization. Each Borg individual is linked to the c…

计算机统考测试,计算机统考专业测试题.doc

文档介绍&#xff1a;应用所有单选题1、下面是某单位主页地址的,其中符合格式的是。A:B:C:D:答案:C知识点:应用部分\和的使用\浏览器的使用\1网页的几个基本术语2、用浏览器浏览网页,在地址栏中输入网址时,通常可以省略的是。A:B:C:D:答案:A知识点:应用部分\和的使用\浏览器的使…

3.Your First Machine Learning Model

Selecting Data for Modeling 你的数据集有太多的变量包裹住你的头。你怎么能把这些压倒性的数据削减到你能理解的东西&#xff1f; 我们首先使用我们的直觉选择一些变量。 后面的课程将向您展示自动确定变量优先级的统计技巧。 要选择变量/列&#xff0c;我们需要查看数据集中…

【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)

题干&#xff1a; The Global Aerial Research Centre has been allotted the task of building the fifth generation of mobile phone nets in Sweden. The most striking reason why they got the job, is their discovery of a new, highly noise resistant, antenna. It …

计算机教室安全预案 博客,校园安全应急预案

校园安全应急预案为了确保师生的人身安全&#xff0c;严格执行上级安全工作的管理要求&#xff0c;保证一旦发生安全事故能够及时处理&#xff0c;特制定我校安全应急预案。一、领导小组组 长&#xff1a;副组长&#xff1a;成 员&#xff1a;全体教师二、主要职责1、组长任校…

4.Model Validation

你已经建立了一个模型。 但它有多好&#xff1f; 在本课程中&#xff0c;您将学习如何使用模型验证来衡量模型的质量。 测量模型质量是迭代改进模型的关键。 What is Model Validation 你几乎要评估你构建的每个模型。在大多数&#xff08;尽管不是全部&#xff09;应用中&am…

【POJ - 2195】Going Home(二分图最优匹配,费用流 或 KM)

题干&#xff1a; On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man, you need to pay a $1 travel fee for every step h…