12. for
原创...大约 6 分钟
1. for 循环遍历列表每个元素
students_list = ['lilei', 'hanmeimei', 'madongmei']
for student in students_list:
print(student)
# output
lilei
hanmeimei
madongmei
2. 遍历列表元素平方放回
- 操作如下列表
lst = [1,2,3,4,5,6,7,8,9,10]
- 平方放回
lst = [1,2,3,4,5,6,7,8,9,10]
position = 0
for num in lst:
lst[position] = num ** 2
position += 1
print(lst)
# output
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3. enmuerate()
enmuerate
是 python 中的一个内置函数,非常实用,它用于遍历序列(比如列表、元组或字符串)时,同时获得每个元素的索引和值,这样可以让循环中的迭代更加直观,也更易于处理
3.1 基本用法
假设有一个列表,你想遍历它并同时获取每个元素的索引和值,你可以这样使用enumerate
:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit)
输出结果:
0 apple
1 banana
2 cherry
3.2 一步步拆分学习
- 给定如下列表
In [1]: fruits = ['apple','banana','cherry']
- 使用 enumerate 后,直接输出
In [2]: enumerate(fruits)
Out[2]: <enumerate at 0x24e7f22e980>
- 上面输出不直观,直接使用
list()
转换
In [3]: list(enumerate(fruits))
Out[3]: [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
- 直接 for 循环查看结果
In [4]: fruits_list = list(enumerate(fruits))
In [5]: for fruit in fruits_list:
...: print(fruit)
...:
(0, 'apple')
(1, 'banana')
(2, 'cherry')
- 元组支持多个变量同时赋值
In [3]: index, fruit = (0, 'apple')
In [4]: index
Out[4]: 0
- 所以 for 循环中的代码可以进行第一步优化
In [1]: fruit = ['apple','banana','cherry']
In [2]: fruit_list = list(enumerate(fruit))
In [3]: for Fruit in fruit_list:
...: index , fruit = Fruit
...: print(index, fruit)
...:
0 apple
1 banana
2 cherry
- for 循环代码进行二次优化
In [1]: fruits = ['apple','banana','cherry']
In [2]: fruits_list = list(enumerate(fruits))
In [3]: for index, fruit in fruits_list:
...: print(index, fruit)
...:
0 apple
1 banana
2 cherry
最后,我们来汇总一下,常规会直接下厨如下代码:
In [6]: for index, fruit in enumerate(fruits): ...: print(index, fruit) ...:
- 上面原本的列表数据已经被使用过枚举(enumerate),所以需要重新创建新的列表:
In [5]: fruits = ['apple','banana','cherry'] In [6]: for index, fruit in enumerate(fruits): ...: print(index, fruit) ...: 0 apple 1 banana 2 cherry
3.3 指定起始索引
默认情况下,
enumerate
从 0 开始计数,但你可以通过添加一个可选的start
参数来指定一个不同的起始索引:fruits = ['apple', 'banana','cherry'] for index, fruit in enumerate(fruits, start = 1): print(index, fruit) # output 1 apple 2 banana 3 cherry
3.4 使用场景
enumerate
特别有用于以下几个场景:- 当你需要对元素进行索引操作时,例如修改原列表或数组。
- 在循环中同时需要索引和元素值,而无需使用range(len(sequence))。
- 使代码更加简洁,可读性更强。
总之,
enumerate
是 Python 中用来增强循环结构的一个非常有用的工具。
4. range()
range函数可以有三个重要的参数:start,stop,step。
- start:序列开始的值,默认为 0
- stop:序列结束的值,不包括这个值。
- step:序列中每个值之间的差(步长),默认为1.
下面是 range 函数的一些使用示例:
只有停止参数:
for i in range(5): print(i) # output 0 1 2 3 4
这将打印数字 0-4.
起始和停止参数:
for i in range(2,6): print(i) # output 2 3 4 5
这将打印数字 2-5
- 起始、停止和步长参数:
for i in range(1, 10, 2): print(i) # output 1 3 5 7 9
这将打印数字1,3,5,7,9
4.1 特性和注意事项
- range 生成的是一个惰性序列,这意味着它指在需要时才生成数字,这有助于节约内存。
- range 对象不支持任意切片,但你可以转换为列表(如list(range(10))) 获得更多的操作能力。
- 在 python 3.0 中,range 代替了 python 2.0 的 xrange, 后者在旧版本中用于生成大的数字序列,因为它更节省内存。range 的这些特性使其在处理循环和其他需要数字序列的场景中非常有用。
5. for 循环嵌套
在python 中,嵌套的for 循环是指一个 for 循环内部包含另一个 for 循环。 这种结构通常用于处理多位数据结构,比如列表、元组或字典的组合,或者在需要执行多层次的迭代任务时使用。
5.1 基本结构
嵌套的 for 循环的基本结构如下:
for 变量1 in 可迭代对象1:
for 变量2 in 可迭代对象2:
# 执行代码块
这段代码首先遍历 matrix 中的每一行(外层循环),然后遍历该行中的每个元素(内层循环),并打印出来。
示例:生成乘法表
下三角乘法表
for i in range(10):
for j in range(1, i+1):
print(f'{j} * {i} = {j * i}', end = ' ')
if j == i:
print('\n')
上三角乘法表
for i in range(1, 10):
# 在每行的开头添加足够的制表符,形成缩进
print('\t\t\t' * (i-1), end='')
for j in range(i, 10):
print(f"{i} * {j} = {i * j}\t", end='')
print() # 每完成一行乘法后换行
5.2 注意事项
- 嵌套循环可以使代码复杂度增加,尤其是当循环层数多时,需要注意代码的可读性和性能
- 在可能的情况下,尽量避免使用太多层的嵌套循环,以免造成代码的运行效率降低
嵌套循环时编程中一个常见的概念,通过适当使用可以解决很多复杂的问题,但也需要注意其对性能的影响
- for 中每次循环的参数只会按顺序执行,中途赋值在循环一开始会重新变为按序执行的数
length = 3
for i in range(length):
print(i)
i = 9
print(i)
# output
0
9
1
9
2
9
- for 循环中循环体不会改变
length = 3
for i in range(length):
print(length)
print(i)
length = 9
print(length)
print('\n\n')
# output
3
0
9
9
1
9
9
2
9
6. 通过列表遍历序列元素
student_list = ['lilei', 'hanmeimei', 'madongmei']
for index in range(len(student_list)):
print(student_list[index])
# output
lilei
hanmeimei
madongmei
7. break 跳出循环
for i in range(10):
print(i)
if i > 5:
break # 循环结束,跳出整个循环
# output
0
1
2
3
4
5
6
i = 0
while True:
print(i)
i += 1
if i > 5:
break
# output
0
1
2
3
4
5
8. pass 啥都不干,占位语句
while True:
pass
命令行强制退出死循环
你认为这篇文章怎么样?
- 0
- 0
- 0
- 0
- 0
- 0