跳至主要內容

12. for

Ryan原创...大约 6 分钟pythonpython编程教程

1. for 循环遍历列表每个元素

students_list = ['lilei', 'hanmeimei', 'madongmei']
for student in students_list:
    print(student)

# output
lilei
hanmeimei
madongmei

2. 遍历列表元素平方放回

  1. 操作如下列表
lst = [1,2,3,4,5,6,7,8,9,10]
  1. 平方放回
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 一步步拆分学习

  1. 给定如下列表
In [1]: fruits = ['apple','banana','cherry']
  1. 使用 enumerate 后,直接输出
In [2]: enumerate(fruits)
Out[2]: <enumerate at 0x24e7f22e980>
  1. 上面输出不直观,直接使用 list() 转换
In [3]: list(enumerate(fruits))
Out[3]: [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
  1. 直接 for 循环查看结果
In [4]: fruits_list = list(enumerate(fruits))
In [5]: for fruit in fruits_list:
   ...:     print(fruit)
   ...:
(0, 'apple')
(1, 'banana')
(2, 'cherry')
  1. 元组支持多个变量同时赋值
In [3]: index, fruit = (0, 'apple')

In [4]: index
Out[4]: 0
  1. 所以 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
  1. 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
  1. 最后,我们来汇总一下,常规会直接下厨如下代码:

    In [6]: for index, fruit in enumerate(fruits):
       ...:     print(index, fruit)
       ...:
    
    1. 上面原本的列表数据已经被使用过枚举(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 特别有用于以下几个场景:

    1. 当你需要对元素进行索引操作时,例如修改原列表或数组。
    2. 在循环中同时需要索引和元素值,而无需使用range(len(sequence))。
    3. 使代码更加简洁,可读性更强。

    总之,enumerate 是 Python 中用来增强循环结构的一个非常有用的工具。

4. range()

range函数可以有三个重要的参数:start,stop,step。

  • start:序列开始的值,默认为 0
  • stop:序列结束的值,不包括这个值。
  • step:序列中每个值之间的差(步长),默认为1.

下面是 range 函数的一些使用示例:

  1. 只有停止参数:

    for i in range(5):
        print(i)
    
    # output
    0
    1
    2
    3
    4
    

    这将打印数字 0-4.

  2. 起始和停止参数:

    for i in range(2,6):
        print(i)
    
    # output
    2
    3
    4
    5
    

    这将打印数字 2-5

    1. 起始、停止和步长参数:
    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
评论
  • 按正序
  • 按倒序
  • 按热度