参考来源:Vitu.AIpython
简单地回顾一下,上一节课咱们初步认识了列表(list)和元组(tuple),这两个批量存储数值的事物。程序员
这一节课咱们来学习一下循环(Loop),这是一种重复执行某些代码的方法。咱们会了解到for和while两种不一样的循环,以及如何有效地利用列表解析,这一python的高级属性。编程
首先,让咱们来看一个例子,仍是咱们熟悉的列表planets:app
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'] for planet in planets: print(planet, end=' ') # 在同一行显示所有行星的名字,以空格作间隔
从上面的例子里总结一下,for循环须要指定两个要素:编程语言
第一个要素是,要使用的变量名字 (在上面的代码中,特指变量planet)函数
第二个要素是,要循环的范围 (在上面的代码中,特指列表planets[]
)oop
在上一节课,咱们讲过in, 用来判断一个数值是否在一个列表中。学习
而在for循环里,in是咱们用链接上述两个要素的关键词。code
in左侧的对象是第一个要素,in右侧的对象是第二个要素,便是支持循环的任何对象。基本上,它能够被认为是一组东西,咱们能够循环它。 对象
除了列表,咱们能够循环元组,下面的代码,至关于在帮咱们计算“2的6次方”是多少:
multiplicands = (2, 2, 2, 2, 2, 2) product = 1 for mult in multiplicands: product = product * mult product
一样,咱们也能够循环字符串里的每个字母。
没错,上方的循环会显示Hello World
,这个全部程序员都知道的,如何进入编写代码的世界的初始口令。
range()是咱们经常使用在循环里的一个函数。 事实证实,它对编写循环仍是很是有用的。
例如,若是咱们想重复一些动做3次:
for i in range(3): print("重要的事情要重复三遍. i =", i)
Python里还有一种循环,叫作while循环。
和for的总体循环不一样的是,while循环是直到某些条件被知足才会被触发循环。
让咱们来看个例子:
i = 0 while i < 10: print(i, end=' ') i += 1
while循环里的参数是对布尔值(booleans)的判断,当这种循环的前提条件被判断为false时,循环就中止。
像上方的代码中,当变量i等于10的时候,循环就中止。
列表解析/推导/生成器是Python最受欢迎和独特的功能之一,这个功能充分利用了for循环。
让咱们来看一个例子:
squares = [n**2 for n in range(10)] squares
上面的代码简洁明了地帮咱们罗列了0-9这十个数字的平方。
若是不使用这一特性,咱们该如何用python实现呢?
squares = [] for n in range(10): squares.append(n**2) squares
是的,正如上方的代码所示,咱们得先建立一个空的列表,把for循环里的每个值用list.append()添加到最初建立的列表里。
咱们还能够在列表解析里添加if的条件判断。用咱们熟悉的列表planets来举个例子:
# 咱们须要名字小于6个字母的行星 short_planets = [planet for planet in planets if len(planet) < 6] short_planets
再看一个和if条件判断并相关,并对列表里的元素作了一些格式转换的例子:
loud_short_planets = [planet.upper() + '!' for planet in planets if len(planet) < 6] loud_short_planets
上方的例子是否是看起来有点复杂?没错,由于正常人类都是一行一行得阅读代码。
让咱们把上述的例子分行来看看:
[ planet.upper() + '!' for planet in planets if len(planet) < 6 ]
这样,咱们想要作的三个操做就一目了然了,让咱们按照对人类阅读逻辑友好的顺序来解读:
一样地,细心的你可能注意到上方的代码没有赋予一个列表来存储循环的输出结果。固然这种作法不是特别的常见。
让咱们再来看一个相似操做的有趣的例子:
[32 for planet in planets]
是的,没错,在上方的代码里,列表解析被用于提供32这个数值出现的次数。
更有趣的是,列表推导与min(),max()和sum()等功能相结合,咱们能够把须要多行代码才能解决的问题用使人印象深入的单行代码解决方案。
让咱们一块儿看一看同一个问题用python的三种不一样解决方案:
须要解决的问题是:一组列表里的负数有几个?
# 方案一:不使用列表解析 def count_negatives(nums): """Return the number of negative numbers in the given list. >>> count_negatives([5, -1, -2, 0, 3]) 2 """ n_negative = 0 for num in nums: if num < 0: n_negative = n_negative + 1 return n_negative
# 方案二:使用解析列表 def count_negatives(nums): return len([num for num in nums if num < 0])
# 方案三:使用解析列表并使用`sum()` def count_negatives(nums): return sum([num < 0 for num in nums])
是否是看起来有一点复杂,不要紧,咱们这里只是想展现python做为编程语言的易读,简洁和使用的多样性。
咱们会对这一门美妙的编程语言慢慢熟悉起来的。