Python 02_Python循环玩法之从基础到高级

一、循环(Loop)基础用法

1.1 基础循环

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
names = ["Alice", "Bob", "Charlie"]

# 遍历字符串、元组、列表、集合 和 字典的keys集
for name in names:
    print(f"Hello, {name}!")

# 给循环遍历元素 使用 enumerate函数 添加编号
for item in enumerate(names):
    print(item)
# 输出:
# (0, 'Alice')
# (1, 'Bob')
# (2, 'Charlie')

for i, name in enumerate(names):
    print(f"{i+1}, {name}")
# 输出:
# 1, Alice
# 2, Bob
# 3, Charlie

# 列表生成式
list_names = [f"{name}!" for name in names]
print(list_names)

# 集合生成式
set_names = {f"{name}!" for name in names}
print(set_names)

# 范围函数range的魔法 —— 控制循环次数
for i in range(5):  # 从0到4
    print(i)

# 嵌套循环 - 九九乘法表
for i in range(1, 10):
    for j in range(1, i+1):
        print(f"{j}x{i}={i*j}", end="\t")
    print()  # 换行

# break和continue:控制循环的指挥棒
for name in names:
    if name == "Bob":
        continue    # 跳过当前循环,执行下一次循环

    if name == "Charlie":
        break   # 跳出(结束)当前层循环,不再执行当前循环语句块
    print(f"Hello, {name}!")

# 遍历字典的key
my_dict = {"apple": 3, "banana": 5, "cherry": 7}
for key in my_dict.keys():
    print(key)
for key in my_dict: 
    print(key)

# 遍历字典的 value
for val in my_dict.values():
    print(val)

# 遍历字典
for key, value in my_dict.items():
    print(key,value)
for item in my_dict.items():
    print(item)

# 字典推导式 - 快速构建字典
keys = ['x', 'y', 'z']
values = [1, 2, 3]
my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)  # {'x': 1, 'y': 2, 'z': 3}

# 逆序循环
for name in reversed(names):
    print(name)

1.2 高级循环

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# for循环后还能跟个else, 如果循环正常结束,没有遇到break,else里的代码就执行。
for i in range(5):
    continue
else:
    print("循环顺利完成,没被break掉!") # 循环中没有遇到break,else里的代码将执行


for i in range(5):
    break
else:
    print("循环顺利完成,没被break掉!") # 循环中有遇到break,else里的代码不执行


# 使用zip:并行处理
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")


# 迭代器与next函数,所有可迭代对象都可以用迭代器来玩:
it = iter(names)
print(next(it))  # Alice
print(next(it))  # Bob

# 列表推导结合条件判断
vowel_start_names = [name for name in names if name[0].lower() in 'aeiou']
print(vowel_start_names)


# 生成器表达式:轻量级迭代神器  - 节省内存
# 生成器是Python的一大特色,非常适合处理大数据流。看这个例子:
# 生成所有小于 1000000 的平方数,但不一次性加载到内存中
squares = (i**2 for i in range(1000000))
for square in squares:  # 只在需要时才计算下一个值,内存友好。
    print(square)

# 列表推导与循环嵌套的高级应用
# 当你需要处理多维数据时,嵌套的列表推导可以非常直观:
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 转置矩阵
transposed = [[row[i] for row in matrix] for i in range(3)]
for row in transposed:
    print(row)

# 利用itertools:循环的高级工具箱
# Python的itertools模块提供了强大的迭代工具。比如,你想交替合并两个列表:
from itertools import chain

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

# 使用chain交替合并
merged = list(chain.from_iterable(zip(list1, list2)))
print(merged)  # 结果: [1, 'a', 2, 'b', 3, 'c']

# 循环与异常处理:稳健的循环
# 在处理可能抛出异常的循环时,使用try-except可以增加代码的健壮性:

numbers = [1, 0, 3, 4]
for num in numbers:
    try:
        print(1 / num)
    except ZeroDivisionError:
        print("Oops! Can't divide by zero.")

Tips: 循环效率优化: 避免在循环内部进行列表的append操作,特别是在循环体很大时,可以考虑预分配列表大小或使用列表生成式。

Licensed under CC BY-NC-SA 4.0