Python中的for语句,没你想的那么简单~
for语句实际上解决的是循环问题。在很多的高级语言中都有for循环(for loop)。for语句是编程语言中针对可迭代对象的语句,它的主要作用是允许代码被重复执行。看一段来自维基百科的介绍:
In computer science, a for-loop (or simply for loop) is a control flow statement for specifying iteration, which allows code to be executed repeatedly。(作用:介绍了for循环是什么?)
A for-loop has two parts: a header specifying the iteration, and a body which is executed once per iteration. (for循环是什么构成的?)
- 是什么:在计算科学中,是针对特殊迭代对象的控制流语句,能够重复执行
- 怎么构成:一个头部(是可迭代对象)+ 每个对象的执行体
目录
本文的主要内容如下,其他内容请参考:
可迭代对象
什么是可迭代对象
可迭代对象(Iteratable Object)
是能够一次返回其中一个成员的对象,比如我们常用的字符串、列表、元组、集合、字典等等之类的对象都属于可迭代对象,获取到这些对象我们就可以用for循环来进行操作。
简单来理解,任何你可以循环遍历的对象都是可迭代对象。
怎么判断
如何判断一个Python对象是不是可迭代对象?通常是使用 isinstance()
函数来判断对象是否是可迭代对象
1 | from collections import Iterable |
小结:在Python常见的数据对象中,只有数字是不可迭代的,字符串、元组、列表、字典等都是可迭代的
字符串的for循环
一次遍历打印字符串中的每个元素
1 | for i in "python": |
p
y
t
h
o
n
在看另一个例子:
1 | for i in "abcdefg": |
a
b
c
d
e
f
g
列表的for循环
不管是单层列表还是多层的嵌套列表,我们都可以遍历打印出来:
1 | # 单层列表 |
小明
小红
小张
小王
1 | # 嵌套列表 |
小明
小红
小张
小王
[19, 20, 18, 23]
上面的例子中最后一个元素当做整体被打印出来,如果也想分开打印呢?
1 | def qiantao(x): # 定义一个函数 |
小明
小红
小张
小王
19
20
18
23
元组的for循环
元组tuple的循环和列表是类似的:
1 | t = ("小明","小红","小王") |
小明
小红
小王
字典的for循环
我们使用keys()、values()、items(),我们可以分别遍历字典的键、值和键值对。需要注意的是:遍历字典默认是遍历字典的键,先定义一个字典:
1 | d = {"name":"Peter","age":20,"sex":"male","address":"china"} |
keys
遍历字典的键;
1 | for i in d.keys(): # 遍历字典的键 |
name
age
sex
address
1 | for i in d: # 默认就是遍历键的取值 |
name
age
sex
address
values
遍历字典的值:
1 | for i in d.values(): # 遍历字典的值 |
Peter
20
male
china
items()
同时遍历字典的键和值
1 | for i in d.items(): # 遍历字典的值 |
('name', 'Peter')
('age', 20)
('sex', 'male')
('address', 'china')
分别取出字典的键和值:
1 | for k,v in d.items(): |
name--->Peter
age--->20
sex--->male
address--->china
range函数的for循环
range函数是 Python 内置函数,用于生成一系列连续整数,多用于 for 循环中。
1 | range(start,stop,step) |
- start:包含start,默认为0,可不写则默认为0
- stop:不包含stop,必须写
- 步长step可正可负,默认是1,不能为0
1、基础案例
1 | range(10) # 生成的是可迭代对象 |
range(0, 10)
默认开头是0
1 | range(0,10) |
range(0, 10)
指定开头为1
1 | range(1,10) |
range(1, 10)
下面是将结果展开成列表:
1 | list(range(10)) # 不包含10(尾部) |
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
指定步长为2:
1 | list(range(0,10,2)) # 不包含10,步长是2 |
[0, 2, 4, 6, 8]
总结:range函数是包含头部不包含尾部
1 | for i in range(10): |
0
1
2
3
4
5
6
7
8
9
2、找出100以内能够被5整除的数:
1 | for i in range(101): # 不包含101,0-100 |
0、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100、
3、高斯求和
求出1到100的所有数之和
1 | sum = 0 |
5050
求出100以内奇数的和:
1 | sum = 0 |
2500
求出100以内偶数的和:
1 | sum = 0 |
2550
多个for语句
for语句中还可以再使用for语句:
1 | for i in ["python","java","html"]: |
PYTHON p
PYTHON y
PYTHON t
PYTHON h
PYTHON o
PYTHON n
JAVA j
JAVA a
JAVA v
JAVA a
HTML h
HTML t
HTML m
HTML l
1 | for i in [4,5,6]: |
1 | 4 # 4*1 |
推导式
(1)上面我们提到能够被5整除的数:使用for循环和if来解决
1 | five = [] # 定义空列表 |
[0,
5,
10,
15,
20,
25,
30,
35,
40,
45,
50,
55,
60,
65,
70,
75,
80,
85,
90,
95,
100]
(2)使用列表推导式如何实现呢?
1 | [x for x in range(101) if x % 5 == 0] |
[0,
5,
10,
15,
20,
25,
30,
35,
40,
45,
50,
55,
60,
65,
70,
75,
80,
85,
90,
95,
100]
for-else
也许你听过if-else,但是听到for-else语句吗?这也算是Python中的一个冷门知识点
1 | for i in range(5): |
0
1
2
3
4
结束
也就是说:for语句结束了依然会执行else的语句
1 | for i in []: |
结束
下面的例子中,当i除以3的余数是2的时候回跳出并终止整个for循环,后面的else就不会执行了
1 | for i in range(10): |
0
1
2
实现三角阵列
1 | for i in range(1,11): |
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
如果我们想要倒过来,该如何实现呢?
1 | for i in range(10,0,-1): |
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
99乘法表
下面举个例子来说明如何实现99乘法表,如何玩转99乘法表参考以前的文章
1 | for i in range(1,10): |