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循环。
文章目录