No results found

【Python 3 基础】循环

本文主要介绍Ptyhon 3中while循环、for循环的基本语法,以及利用for循环遍历列表、字典和列表推导的相关内容。

while循环

基本语法

while循环语法比较简单,与其他语言类似。

1
2
3
4
5
#输出1-10
x = 1
while x <= 10:
print(x)
x +=1

for循环

遍历列表

for循环更多地用于列表,集合,字典等遍历。

例如遍历一个列表:

1
2
3
4
#遍历列表
numbers = [0,1,2,3,4,5]
for number in numbers:
print(number)

如果要生成特定序列,可使用内建函数range(),注意python 3 中xrange()函数跟range()已合并。之前版本中xrange()函数作用与range()函数相同,区别是range()函数一次创建整个序列,xrange()函数一次只创建一个数。需要迭代一个巨大的序列时,xrange()会更高效一些。

1
2
3
#如果只是输出某一范围的数字,可以使用范围函数range(),该函数生成一个包含开始,不含结束区间的序列。
for number in range(0,6):
print(number)

字典遍历

可使用如下语法遍历字典的键和值。

1
2
3
4
#循环遍历字典
d = {'x':1,'y':2,'z':3}
for key,value in d.items():
print(key,'->',value)

如果只遍历字典的键,如下:

1
2
3
4
#循环遍历字典
d = {'x':1,'y':2,'z':3}
for key in d.keys():
print(key)

如果只遍历字典的值,如下:

1
2
3
4
#循环遍历字典
d = {'x':1,'y':2,'z':3}
for value in d.values():
print(value)

字典并行遍历

如果要同时遍历两个列表,可以按如下方式:

1
2
3
4
5
6
#并行迭代,如果要同时遍历两个列表
names = ['a','b','c']
ages = [12,34,55]

for i in range(len(names)):
print(names[i],' is ',ages[i],' years old')

内建zip()函数可用于并行迭代,把两个序列并在一起,返回一个元祖列表,写法更简洁。

1
2
3
4
5
6
7
# 内建zip()函数可用于并行迭代,把两个序列并在一起,返回一个元祖列表
# 如果连个序列不等长,遍历完短的序列就结束了
names = ['a','b','c']
ages = [12,34,55,66]

for name,age in zip(names,ages):
print(name,' is ',age,' years old')

for循环与else语句

for循环中可以使用判断语句,如果符合某一特定条件就让for循环终止,如下代码,如果n等于3,则循环终止了。

1
2
3
4
for n in range(7):
if n == 3:
print(n)
break

如果在for后加一个else子句,如果for循环被break打断,else子句不会被执行,如下代码输出结果3。

1
2
3
4
5
6
for n in range(7):
if n == 3:
print(n)
break
else:
print('No')

如果for循环中没有执行break语句,则else子句会被执行一次,如下代码输出结果:No

1
2
3
4
5
6
for n in range(7):
if n == 7:
print(n)
break
else:
print('No')

列表推导

刚开始看列表推导的语法可能不大容易理解,它的功能就是在一个列表基础上生成另一个列表,例如生成0-9的平方数列表:

1
2
3
[x*x for x in range(10)]

# 输出结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

还可以在列表推导中加入判断语句,例如,如果要过滤出0-9中能被3整除的数的平方,可以怎么写:

1
2
3
4
# 输出能被3整除的平方数
[x*x for x in range(10) if x % 3 == 0]

# 输出结果:[0, 9, 36, 81]

列表推导中可以写多个for语句,例如:

1
2
3
[(x,y) for x in range(3) for y in range(3)]

# 输出结果:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

可以看到,效果类似于表的全连接,输出连个列表的所有组合,同样可以加入if语句,效果类似于表连接中的where条件过滤。

1
2
3
[(x,y) for x in range(3) for y in range(3) if x == y]

# 输出结果:[(0, 0), (1, 1), (2, 2)]

参考

Magnus Lie Hetland 著《Beginning Python-From Novice to Professional Secnod Edition》

文章目录
  1. 1. while循环
    1. 1.1. 基本语法
  2. 2. for循环
    1. 2.1. 遍历列表
    2. 2.2. 字典遍历
    3. 2.3. 字典并行遍历
    4. 2.4. for循环与else语句
    5. 2.5. 列表推导
  3. 3. 参考
|