Python Loop详解!

嗨,你好啊,我是猿java

在 Python 编程语言中,提供了两种类型的循环——For 循环和 While 循环来处理循环需求以及三种执行循环的方法。虽然所有方法提供了类似的基本功能,但它们在语法和条件检查时间上有所不同。在本文中,我们将了解 Python 循环,并通过示例来理解它们的工作原理。

While循环

在 Python 中,while 循环用于重复执行一组语句,直到给定的条件满足为止,当条件变为假时,程序立即执行循环后的行。

While 循环语法:

1
2
while 表达式:
语句(们)

所有在编程结构后面缩进相同数量字符的语句被视为单个代码块的一部分。Python 使用缩进作为分组语句的方法。

让我们看看一个简单的 while 循环示例:使用 ‘while’ 循环通过将名为 ‘count’ 的变量从 1 增加到 3 来打印三次“Hello Python”。

1
2
3
4
count = 0
while count < 3:
count = count + 1
print("Hello Python")

输出

1
2
3
Hello Python
Hello Python
Hello Python

在 Python 中使用 else 语句与 While 循环,else 子句仅在 while 条件变为假时执行。如果你中断了循环,或者引发了异常,则不会执行 else 子句。

While 循环与 else 语句的语法:

1
2
3
4
while 条件:
# 执行这些语句
else:
# 执行这些语句

下面是一个带有 else 语句的 while 循环示例:使用 ‘while’ 循环打印三次“Hello Python”,然后在循环结束后打印“In Else Block”,因为有一个与 ‘while’ 循环关联的“else”块。

1
2
3
4
5
6
count = 0
while count < 3:
count = count + 1
print("Hello Python")
else:
print("In Else Block")

输出

1
2
3
4
Hello Python
Hello Python
Hello Python
In Else Block

For 循环

For 循环用于顺序遍历。例如:遍历列表、字符串或数组等。在 Python 中,有一个“for in”循环,类似于其他语言中的 foreach 循环。让我们通过示例学习如何在 Python 中使用 for 循环进行顺序遍历。

For 循环语法

1
2
for 迭代变量 in 序列:
语句

它可以用于遍历范围和迭代器。

示例: 使用一个 Python for 循环遍历从 0 到 3(不包括 4)的值,如 range(0, n) 结构所指定。它将在循环的每次迭代中打印 ‘i’ 的值。

1
2
3
n = 4
for i in range(0, n):
print(i)

输出

1
2
3
4
0
1
2
3

我们可以使用 for 循环遍历 Python 中的列表、元组、字符串和字典。以下代码展示了在 Python 中通过各种数据结构进行迭代的不同方法。它演示了对列表、元组、字符串、字典和集合的迭代,打印它们的元素或键值对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
print("List Iteration")
l = ["hello", "python", "loop"]
for i in l:
print(i)

print("\nTuple Iteration")
t = ("hello", "python", "loop")
for i in t:
print(i)

print("\nString Iteration")
s = "Hello"
for i in s:
print(i)

print("\nDictionary Iteration")
d = dict()
d['xyz'] = 123
d['abc'] = 345
for i in d:
print("%s %d" % (i, d[i]))

print("\nSet Iteration")
set1 = {1, 2, 3, 4, 5, 6}
for i in set1:
print(i),

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
List Iteration
hello
python
loop

Tuple Iteration
hello
python
loop

String Iteration
H
e
l
l
o

Dictionary Iteration
xyz 123
abc 345

Set Iteration
1
2
3
4
5
6

通过序列索引进行迭代

我们还可以使用序列中元素的索引进行迭代。关键思想是先计算列表的长度,然后在该长度范围内迭代序列。见下面的示例:

示例:该代码使用 ‘for’ 循环遍历列表并打印每个元素。它基于每个元素的索引进行迭代,使用 ‘range(len(list))’ 获得索引。结果是它在单独的行上打印列表中的每个项目。

1
2
3
list = ["hello", "python", "loop"]
for index in range(len(list)):
print(list[index])

输出

1
2
3
hello
python
loop

else 和for 循环结合

我们还可以将 else 语句与 for 循环结合使用,就像在 while 循环中一样。但由于 for 循环中没有条件基于其终止执行,所以 else 块将在 for 块执行完成后立即执行。

在此代码中,‘for’ 循环遍历列表并打印每个元素,就像前面的示例一样。然而,在循环完成后,将执行 “else” 块。因此,在这种情况下,一旦循环完成,它将打印“Inside Else Block”。

1
2
3
4
5
list = ["hello", "python", "loop"]
for index in range(len(list)):
print(list[index])
else:
print("Inside Else Block")

输出

1
2
3
4
hello
python
loop
Inside Else Block

Python 中的嵌套循环

Python 编程语言允许在一个循环内使用另一个循环,这称为嵌套循环。以下部分展示了一些示例以说明这一概念。

嵌套循环语法

1
2
3
4
for 迭代变量 in 序列:
for 迭代变量 in 序列:
语句(们)
语句(们)

Python 编程语言中嵌套 while 循环语句的语法如下:

1
2
3
4
while 表达式:
while 表达式:
语句(们)
语句(们)

关于循环嵌套的最后一点是,我们可以在 Python 中将任何类型的循环放在任何其他类型的循环内。例如,for 循环可以在 while 循环内,反之亦然。

示例:此 Python 代码使用嵌套的 ‘for’ 循环创建一个数字的三角形模式。它从 1 到 4 进行迭代,在每次迭代中根据迭代次数多次打印当前数字。结果是一个类似于金字塔的数字模式。

1
2
3
4
for i in range(1, 5):
for j in range(i):
print(i, end=' ')
print()

输出

1
2
3
4
1 
2 2
3 3 3
4 4 4 4

循环控制语句

循环控制语句改变执行的正常顺序。当执行离开一个作用域时,在该作用域中创建的所有自动对象都会被销毁。Python 支持以下控制语句。

Continue 语句
Python 中的 continue 语句将控制返回到循环的开头。

示例:此 Python 代码遍历字符串 ‘hello’ 的字符。当遇到字符 ‘e’ 或 ‘s’ 时,它使用 continue 语句跳过当前迭代并继续下一个字符。对于所有其他字符,它打印“Current Letter :”后跟字符。因此,输出将显示除 ‘e’ 和 ‘s’ 之外的所有字符,每个字符在单独的行上。

1
2
3
4
for letter in 'hello':
if letter == 'e' or letter == 's':
continue
print('Current Letter :', letter)

输出

1
2
3
4
5
Current Letter : h
Current Letter : e
Current Letter : l
Current Letter : l
Current Letter : o

Break 语句

Python 中的 break 语句将控制带出循环。

示例:在此 Python 代码中,它遍历字符串 ‘hello’ 的字符。当遇到字符 ‘e’ 或 ‘s’ 时,它使用 break 语句退出循环。循环终止后,它打印“Current Letter :”后跟在循环中遇到的最后一个字符(‘e’ 或 ‘s’ 之一)。因此,输出将显示“Current Letter :”后跟字符串中首次出现的 ‘e’ 或 ‘s’。

1
2
3
4
5
for letter in 'loop':
if letter == 'o' or letter == 's':
break

print('Current Letter :', letter)

输出

1
Current Letter : o

Pass 语句
我们在 Python 中使用 pass 语句来编写空循环。Pass 也用于空控制语句、函数和类。

示例:此 Python 代码使用 ‘for’ 循环遍历字符串 ‘hello’ 的字符。然而,它在循环中不执行任何特定操作,而是使用 ‘pass’ 语句。在循环之后,它打印“Last Letter :”后跟字符串中的最后一个字符,即 ‘s’。

1
2
3
for letter in 'loop':
pass
print('Last Letter :', letter)

输出

1
Last Letter : p

Python 中的 for 循环内部如何工作?

在进入本节之前,你应该对 Python 迭代器有先验了解。

首先,让我们看看一个简单的 Python 中的 for 循环是什么样子。

示例:此 Python 代码遍历一个名为 fruits 的列表,其中包含“apple”、“orange”和“kiwi”。它在单独的行上打印每个水果的名称,按它们在列表中出现的顺序显示。

1
2
3
4
fruits = ["apple", "orange", "kiwi"]

for fruit in fruits:
print(fruit)

输出

1
2
3
apple
orange
kiwi

在这里,我们可以看到 Python 中的 for 循环遍历了可迭代对象 fruit,它是一个列表。列表、集合、字典是一些可迭代对象,而整数对象不是可迭代对象。For 循环可以遍历这些可迭代对象中的任何一个。

此 Python 代码使用迭代器手动遍历一个水果列表。它逐个打印每个水果的名称,当列表中没有更多项目时停止。

1
2
3
4
5
6
7
8
fruits = ["apple", "orange", "kiwi"]
iter_obj = iter(fruits)
while True:
try:
fruit = next(iter_obj)
print(fruit)
except StopIteration:
break

输出

1
2
3
apple
orange
kiwi

我们可以看到,在幕后我们调用了 iter() 和 next() 方法。

我们在本文中介绍了 Python 循环。我们还看到了如何在 Python 中使用 for 循环、while 循环和嵌套循环。本文提供了不同的用例场景和示例来演示循环的工作原理并提供清晰的理解。

常见问题

在 Python 中哪种循环更快?

一般来说,for 循环由于其实现方式往往比 while 循环更快。然而,对于大多数实际用途来说,for 和 while 循环之间的性能差异通常可以忽略不计。选择它们应该基于清晰性和特定任务的适用性,而不是性能问题。

为什么 Python 在循环中会很慢?

与 C 或 C++ 等低级语言相比,Python 在循环中可能被认为很慢。这主要是因为 Python 是一种解释型语言,意味着每行代码在运行时逐行执行。此外,Python 的动态类型和内存管理相比于静态类型的编译语言可能会引入开销。

Python 中使用了多少种循环?

Python 支持几种类型的循环:

  • for 循环:遍历序列(例如列表、元组、字符串、字典)。
  • while 循环:只要指定条件为真,就执行一段代码。
  • 嵌套循环:一个循环内使用另一个循环。
  • 推导式(例如列表推导式、字典推导式):使用循环创建列表、字典等的简洁方法。

如何改进 Python 中的循环?

要优化 Python 中的循环,请考虑以下提示:

  • 使用列表推导式:它们通常比传统的 for 循环创建列表更快。
  • 减少函数调用:如果可能,将函数调用移到循环外部。
  • 使用内置函数:Python 的内置函数(例如 map()、filter()、sum())是优化的,可能比手动编写的循环更快。
  • 分析代码:使用 cProfile 等工具识别瓶颈并进行相应优化。
  • 考虑使用库:如 NumPy 和 pandas 等库提供了针对数组或数据帧的常见任务的优化函数。

在 Python 中 for 循环不好吗?

不,for 循环在 Python 中并不是本质上不好的。它们是迭代的基本构造,在 Python 编程中广泛使用。然而,对于某些涉及大型数据集或性能关键代码的任务,使用列表推导式、向量化操作(在 NumPy 等库中)或减少函数调用等技术优化循环操作可以提高效率。

总结

本文介绍了 Python 中的两种主要循环结构:for 循环和 while 循环,并通过多个示例详细讲解了它们的使用方法和特点。while 循环用于在条件为真时重复执行代码块,而 for 循环用于遍历序列,如列表、元组、字符串和字典。此外,还介绍了嵌套循环和循环控制语句(如 continue、break 和 pass),以及如何在循环中使用 else 语句。最后,讨论了如何优化循环性能,如使用列表推导式和内置函数。总的来说,理解和正确使用循环是高效 Python 编程的关键。

学习交流

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。

drawing