Python的For循环


作者Lou Xiao创建时间2020-05-03 11:13:00更新时间2020-05-09 17:22:00

在Python中有2种循环:

  • 知道循环次数,使用For循环
  • 不知道循环次数,使用While循环

For循环的语法

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 for <元素> in <可迭代的对象> :
2 <语句>

可迭代的对象:

  • 字符串(str)
  • 列表(list)、元组(tuple)、集合(set)
  • 字典(dict)
  • 迭代器 (本节重点是学会如何使用迭代器,以后课程会讲如何编写自己的迭代器)

实践

❶ 迭代str

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_str = 'Hello, Python'
2 for char in a_str:
3 print(char, end=',')

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 H,e,l,l,o,,, ,P,y,t,h,o,n,

❷ 迭代list、tuple、set

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_list = [1, 2, 3]
2 for x in a_list:
3 print(x, end=',')
4
5 print()
6
7 a_tuple = (1, 2, 3)
8 for x in a_tuple:
9 print(x, end=',')
10
11 print()
12
13 a_set = {1, 2, 3}
14 for x in a_set:
15 print(x, end=',')

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 1,2,3,
2 1,2,3,
3 1,2,3,

❸ 迭代dict

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_dict = {
2 "A": 1,
3 "B": 3,
4 "D": 6,
5 }
6
7 for key in a_dict.keys():
8 print(key)
9 print()
10
11 for val in a_dict.values():
12 print(val)
13 print()
14
15 for key, val in a_dict.items():
16 print(key, val)
17 print()

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 A
2 B
3 D
4
5 1
6 3
7 6
8
9 A 1
10 B 3
11 D 6

❹ range()

range() 是Python内置的迭代器,用来构造一个整数区间。 👉 [range]

语法说明
range(结束值B)表示[0,结束值B)的整数,步长(间隔)是1
range(开始值A,结束值B)表示[开始值A,结束值B)的整数,步长(间隔)是1
range(开始值A,结束值B,步长T)表示[开始值A,结束值B)的整数,步长(间隔)是T
1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 for i in range(5):
2 print(i, end=',')
3 print()
4
5 for i in range(1, 5 + 1):
6 print(i, end=',')
7 print()
8
9 for i in range(1, 10, 2):
10 print(i, end=',')
11 print()

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 0,1,2,3,4,
2 1,2,3,4,5,
3 1,3,5,7,9,

❺ enumerate()

range() 是Python内置的迭代器,用来产生迭代元素的序号/索引(index)。 👉 [enumerate]

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_str = "Python"
2 for i, char in enumerate(a_str):
3 print(i, char)

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 0 P
2 1 y
3 2 t
4 3 h
5 4 o
6 5 n
1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_dict = {
2 "A": 1,
3 "B": 3,
4 "D": 6,
5 }
6
7 for i, (key, val) in enumerate(a_dict.items()):
8 print(i, key, val)

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 0 A 1
2 1 B 3
3 2 D 6

❻ zip()

zip() 是Python内置的迭代器,同时从多个迭代器返回元素。 👉 [zip]

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 a_list = [5, 6, 7, 8]
2 b_list = ["A", "B", "C"]
3 c_list = ["Hello", "Python"]
4 for a, b, c in zip(a_list, b_list, c_list):
5 print(a, b, c)

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 5 A Hello
2 6 B Python

注意:

  • 迭代的次数是以最短的迭代器为准
  • 注意观察a、b、c,他们的值分别来自a_list、b_list、c_list

❼ 自定义迭代器 datetime_range()

如果Python中内置的迭代器不能满足需求,可以自定义迭代器。举一个很实用的例子。

如何遍历2019年12月25日到2020年1月5日之间的日期?

糟糕的写法:

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 for year in range(2019, 2020 + 1):
2 for month in range(1, 12 + 1):
3 for day in range(1, 31 + 1):
4 pass

这样包含了很多额外的天数,需要在循环里面特殊处理来剔除这些不需要的天数,写完这样的代码,是不是觉得特别麻烦?
这个解题思路,太不Python了!!!

Python优雅的遍历日期区间

首先构造一个迭代器 datetime_range()

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 import datetime
2 def datetime_range(date_start, date_end, step=datetime.timedelta(days=1)):
3 p = date_start
4 while p <= date_end:
5 yield p
6 p += step
字段说明
date_start开始日期,比如:datetime.datetime(2019,12,25)
date_end结束日期,比如:datetime.datetime(2020,1,5)
step时间间隔(步长),比如:
datetime.timedelta(days=1) 间隔1天
datetime.timedelta(hours=1) 间隔1小时
datetime.timedelta(minutes=1) 间隔1分钟

然后就可以这样使用:

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 date_a = datetime.datetime(2019, 12, 25)
2 date_b = datetime.datetime(2020, 1, 5)
3 for day in datetime_range(date_a, date_b):
4 print(day.strftime('%Y-%m-%d'))

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 2019-12-25
2 2019-12-26
3 2019-12-27
4 2019-12-28
5 2019-12-29
6 2019-12-30
7 2019-12-31
8 2020-01-01
9 2020-01-02
10 2020-01-03
11 2020-01-04
12 2020-01-05

这样写,是不是很easy?

datetime的使用请参考 👉 [datetime]
datetime的格式化参考 👉 [strftime]
timedelta的使用请参考 👉 [timedelta]

小结

  • Python的for循环,虽然语法简单,但是功能很强悍;
  • For循环配合迭代器使用,更是厉害到家了;
  • For循环在日常开发中常常用到;如何优雅的使用for循环是个学习目标;
    • 数据处理部分、任务并行将会重度使用for循环。
文章目录