Python for循环
Python中的 for 循环可以遍历任何序列的项,例如列表或字符串。
语法
for iterating_var in sequence:
statements(s)
如果一个序列包含一个表达式列表,那么它首先被评估。然后,序列中的第一项(索引为0)被赋值给迭代变量 iterating_var。
接下来,执行语句块。列表中的每一项都被赋值给迭代变量,然后执行语句块,直到整个序列用尽。
以下流程图说明了 for 循环的工作原理:
由于循环在序列中的每个成员元素上执行,因此不需要明确验证控制循环的布尔表达式(与 while 循环中的情况不同)。
诸如列表、元组或字符串之类的序列对象被称为可迭代对象,因为 for 循环通过集合进行迭代。任何迭代器对象都可以通过 for 循环进行迭代。
字典的 items()、keys() 和 values() 方法返回的视图对象也是可迭代的,因此我们可以用 for 循环运行它们。
Python 内置的 range() 函数返回一个流式传输数字序列的迭代器对象。我们可以用 range 运行 for 循环。
在字符串中使用for循环
字符串是一系列 Unicode 字母,每个字母都有一个位置索引。以下示例将比较每个字符,并显示它是否不是元音(’a’、’e’、’I’、’o’ 或 ‘u’)。
示例
zen = '''
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
'''
for char in zen:
if char not in 'aeiou':
print (char, end='')
输出
在执行时,该代码将产生以下输出结果 –
Btfl s bttr thn gly.
Explct s bttr thn mplct.
Smpl s bttr thn cmplx.
Cmplx s bttr thn cmplctd.
在元组中使用for循环
Python的元组对象也是一个索引序列,因此我们可以使用 for 循环遍历它的项。
示例
在下面的示例中, for 循环遍历一个包含整数的元组,并返回所有数字的总和。
numbers = (34,54,67,21,78,97,45,44,80,19)
total = 0
for num in numbers:
total+=num
print ("Total =", total)
输出
执行此代码将产生以下输出:
Total = 539
在列表使用for循环
Python的列表对象也是一个索引序列,因此我们可以使用 for 循环遍历它的项。
示例
在下面的例子中,for循环遍历一个包含整数的列表,并且只打印能被2整除的数字。
numbers = [34,54,67,21,78,97,45,44,80,19]
total = 0
for num in numbers:
if num%2 == 0:
print (num)
输出
执行此代码时,将产生以下输出−
34
54
78
44
80
在Range对象中使用for循环
Python的内置range()函数返回一个range对象。Python的range对象是一个迭代器,每次迭代生成一个整数。该对象包含从开始到结束的整数,由步长参数分隔。
语法
range()函数具有以下语法-
range(start, stop, step)
参数
- Start − 范围的起始值。可选。默认值为0。
-
Stop − 范围的终止值。不包含该值。
-
Step − 范围中的整数按照指定的步长递增。可选,默认值为1。
返回值
range() 函数返回一个范围对象。它可以被解析为列表序列。
示例1
numbers = range(5)
'''
start is 0 by default,
step is 1 by default,
range generated from 0 to 4
'''
print (list(numbers))
# step is 1 by default, range generated from 10 to 19
numbers = range(10,20)
print (list(numbers))
# range generated from 1 to 10 increment by step of 2
numbers = range(1, 10, 2)
print (list(numbers))
输出
执行后,此代码将产生以下输出−
[0, 1, 2, 3, 4]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[1, 3, 5, 7, 9]
示例2
一旦我们获得了范围,我们就可以使用 for 循环。
for num in range(5):
print (num, end=' ')
print()
for num in range(10,20):
print (num, end=' ')
print()
for num in range(1, 10, 2):
print (num, end=' ')
输出
执行后,这段代码将产生以下输出:
0 1 2 3 4
10 11 12 13 14 15 16 17 18 19
1 3 5 7 9
示例3:阶乘
阶乘是从1乘到那个数n的所有数字的乘积。也可以定义为从1乘到n的数字的乘积。
Factorial of a number n! = 1 * 2 * . . . . . * n
我们使用range()函数来获得从1到n-1的数字序列,然后进行累积乘法来得到阶乘的值。
fact=1
N = 5
for x in range(1, N+1):
fact=fact*x
print ("factorial of {} is {}".format(N, fact))
输出
运行此代码将产生以下输出:
factorial of 5 is 120
在上面的程序中,改变N的值以获得不同数字的阶乘值。
在序列索引使用for循环
要遍历一个序列,我们可以使用range()函数获取索引列表。
Indices = range(len(sequence))
然后我们可以按照以下方式形成一个 for 循环:
numbers = [34,54,67,21,78]
indices = range(len(numbers))
for index in indices:
print ("index:",index, "number:",numbers[index])
在执行时,此代码将产生以下 输出 −
index: 0 number: 34
index: 1 number: 54
index: 2 number: 67
index: 3 number: 21
index: 4 number: 78
在字典使用for循环
与列表、元组或字符串不同,Python中的字典数据类型不是一个序列,因为其中的项目没有位置索引。然而,仍然可以使用不同的技巧遍历一个字典。
在字典对象上运行简单的 for 循环将遍历使用的键。
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers:
print (x)
执行此代码将产生以下输出
10
20
30
40
一旦我们能够获得键,就可以通过使用方括号运算符或使用 get() 方法轻松访问其关联的值。请看下面的例子−
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers:
print (x,":",numbers[x])
它将产生以下 输出 −
10 : Ten
20 : Twenty
30 : Thirty
40 : Forty
dict类的items()、keys()和values()方法分别返回视图对象dict_items、dict_keys和dict_values。这些对象都是迭代器,因此我们可以在它们上运行for循环。
dict_items对象是一个包含键值对元组的列表,可以通过for循环来遍历,如下所示−
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers.items():
print (x)
它将产生以下输出
输出 −
(10, 'Ten')
(20, 'Twenty')
(30, 'Thirty')
(40, 'Forty')
在这里,”x”是从dict_items迭代器中的元组元素。我们可以进一步将这个元组解包成两个不同的变量。请检查以下代码:
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x,y in numbers.items():
print (x,":", y)
它将产生以下 输出 。
10 : Ten
20 : Twenty
30 : Thirty
40 : Forty
同样地,dict_keys对象中的键集合可以被遍历。看看下面的例子:
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
for x in numbers.keys():
print (x, ":", numbers[x])
它将产生相同的 输出 −
10 : Ten
20 : Twenty
30 : Thirty
40 : Forty