深入理解python中的for循环

2026-02-04 15:24:12

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()函数来判断对象是否是可迭代对象

代码语言:javascript复制from collections import Iterable小结:在Python常见的数据对象中,只有数字是不可迭代的,字符串、元组、列表、字典等都是可迭代的

字符串的for循环一次遍历打印字符串中的每个元素

代码语言:javascript复制for i in "python":

print(i)代码语言:javascript复制p

y

t

h

o

n在看另一个例子:

代码语言:javascript复制for i in "abcdefg":

print(i)代码语言:javascript复制a

b

c

d

e

f

g列表的for循环不管是单层列表还是多层的嵌套列表,我们都可以遍历打印出来:

代码语言:javascript复制# 单层列表

a = ["小明","小红","小张","小王"]

for i in a:

print(i) # 打印列表中的每个元素代码语言:javascript复制小明

小红

小张

小王代码语言:javascript复制# 嵌套列表

b = ["小明","小红","小张","小王",[19,20,18,23]]

for i in b:

print(i)代码语言:javascript复制小明

小红

小张

小王

[19, 20, 18, 23]上面的例子中最后一个元素当做整体被打印出来,如果也想分开打印呢?

代码语言:javascript复制def qiantao(x): # 定义一个函数

for each in x: # 遍历每个原始列表中的每个元素

if isinstance(each, list): # 判断每个元素是否是列表:isintance

qiantao(each) # 如果是列表,递归执行函数qiantao()

else:

print(each) # 如果不是列表,就直接打印该元素

b = ["小明","小红","小张","小王",[19,20,18,23]]

# 调用函数,传入列表b

qiantao(b)代码语言:javascript复制小明

小红

小张

小王

19

20

18

23元组的for循环元组tuple的循环和列表是类似的:

代码语言:javascript复制t = ("小明","小红","小王")

for i in t:

print(i)代码语言:javascript复制小明

小红

小王字典的for循环我们使用keys()、values()、items(),我们可以分别遍历字典的键、值和键值对。需要注意的是:遍历字典默认是遍历字典的键,先定义一个字典:

代码语言:javascript复制d = {"name":"Peter","age":20,"sex":"male","address":"china"}keys遍历字典的键;

代码语言:javascript复制for i in d.keys(): # 遍历字典的键

print(i)代码语言:javascript复制name

age

sex

address代码语言:javascript复制for i in d: # 默认就是遍历键的取值

print(i)代码语言:javascript复制name

age

sex

addressvalues遍历字典的值:

代码语言:javascript复制for i in d.values(): # 遍历字典的值

print(i)代码语言:javascript复制Peter

20

male

chinaitems()同时遍历字典的键和值

代码语言:javascript复制for i in d.items(): # 遍历字典的值

print(i)代码语言:javascript复制('name', 'Peter')

('age', 20)

('sex', 'male')

('address', 'china')分别取出字典的键和值:

代码语言:javascript复制for k,v in d.items():

print(k + "--->" + str(v))代码语言:javascript复制name--->Peter

age--->20

sex--->male

address--->chinarange函数的for循环range函数是 Python 内置函数,用于生成一系列连续整数,多用于 for 循环中。

代码语言:javascript复制range(start,stop,step)start:包含start,默认为0,可不写则默认为0stop:不包含stop,必须写步长step可正可负,默认是1,不能为01、基础案例

代码语言:javascript复制range(10) # 生成的是可迭代对象代码语言:javascript复制range(0, 10)默认开头是0

代码语言:javascript复制range(0,10)代码语言:javascript复制range(0, 10)指定开头为1

代码语言:javascript复制range(1,10)代码语言:javascript复制range(1, 10)下面是将结果展开成列表:

代码语言:javascript复制list(range(10)) # 不包含10(尾部)代码语言:javascript复制[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]指定步长为2:

代码语言:javascript复制list(range(0,10,2)) # 不包含10,步长是2代码语言:javascript复制[0, 2, 4, 6, 8]总结:range函数是包含头部不包含尾部

代码语言:javascript复制for i in range(10):

print(i)代码语言:javascript复制0

1

2

3

4

5

6

7

8

92、找出100以内能够被5整除的数:

代码语言:javascript复制for i in range(101): # 不包含101,0-100

if i % 5 == 0: # %表示求余数:余数为0则表示整除

print(i,end="、")代码语言:javascript复制0、5、10、15、20、25、30、35、40、45、50、55、60、65、70、75、80、85、90、95、100、3、高斯求和

求出1到100的所有数之和

代码语言:javascript复制sum = 0

for i in range(1,101):

sum = sum + i # 每循环一次,sum就是这个数字

sum代码语言:javascript复制5050求出100以内奇数的和:

代码语言:javascript复制sum = 0

# 步长为2,从1开始:1,3,5,7...

for i in range(1,101,2):

sum = sum + i

sum代码语言:javascript复制2500求出100以内偶数的和:

代码语言:javascript复制sum = 0

# 步长为2,从2开始:2,4,6,8...

for i in range(2,101,2):

sum = sum + i

sum代码语言:javascript复制2550多个for语句for语句中还可以再使用for语句:

代码语言:javascript复制for i in ["python","java","html"]:

for j in i:

print(i.upper(),j) # upper():将字母变成大写代码语言:javascript复制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代码语言:javascript复制for i in [4,5,6]:

for j in [1,2,3]:

print(i*j) # 实现任意两个数的乘法代码语言:javascript复制4 # 4*1

8 # 4*2

12 # 4*3

5 # 5*1

10 # 5*2

15 # 5*3

6 # 6*1

12 # 6*2

18 # 6*3推导式(1)上面我们提到能够被5整除的数:使用for循环和if来解决

代码语言:javascript复制five = [] # 定义空列表

for i in range(101): # 不包含101,0-100

if i % 5 == 0: # %表示求余数:余数为0则表示整除

five.append(i) # 添加到列表中

five代码语言:javascript复制[0,

5,

10,

15,

20,

25,

30,

35,

40,

45,

50,

55,

60,

65,

70,

75,

80,

85,

90,

95,

100](2)使用列表推导式如何实现呢?

代码语言:javascript复制[x for x in range(101) if x % 5 == 0]代码语言:javascript复制[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中的一个冷门知识点

代码语言:javascript复制for i in range(5):

print(i)

else:

print("结束")代码语言:javascript复制0

1

2

3

4

结束也就是说:for语句结束了依然会执行else的语句

代码语言:javascript复制for i in []:

print(i)

else:

print("结束")代码语言:javascript复制结束下面的例子中,当i除以3的余数是2的时候回跳出并终止整个for循环,后面的else就不会执行了

代码语言:javascript复制for i in range(10):

print(i)

if i % 3 == 2:

break

else:

print("结束")代码语言:javascript复制0

1

2实现三角阵列代码语言:javascript复制for i in range(1,11):

for k in range(1,i):

print(k, end=" ")

print("\n")​

代码语言:javascript复制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如果我们想要倒过来,该如何实现呢?

代码语言:javascript复制for i in range(10,0,-1):

for k in range(1,i):

print(k, end=" ")

print("\n")代码语言:javascript复制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

199乘法表下面举个例子来说明如何实现99乘法表,如何玩转99乘法表参考以前的文章

代码语言:javascript复制for i in range(1,10):

for j in range(1,i+1): # 为了保证有4*4,也就是同个数字相乘的等式,需要让i出现,使用i+1

print('{}x{}={}'.format(j, i, i*j), end=" ") # end的结束符号用空格

print("\n")

nba世界杯