注意:只要是迭代Iterable
对象,都可被for ...in...
循环,例如列表,元组,字典,字符串
1.for循环的简答使用:
代码:
jobs = ['teacher','doctor','editor']
for job in jobs: #注意此处的冒号
print(job) #循环体要缩进(4个空格)
print(job + ' is a very good job.') #相同缩进的代码为统一代码块
#不同语句块最好隔一空行
print('\nover') #for循环结束后执行(缩进不同)
结果:
teacher
teacher is a very good job.
doctor
doctor is a very good job.
editor
editor is a very good job.
over
tip:如何判断是否是迭代对象,可使用collections
模块的Iterable
类型
代码:
from collections import Iterable
print(isinstance(123, Iterable)) # 整数不是可迭代对象
print(isinstance('abc', Iterable))
print(isinstance(['a', 'b'], Iterable))
print(isinstance(('a', 3), Iterable))
print(isinstance({'name': 'Tom', 'age': 18}, Iterable))
结果:
False
True
True
True
True
2.for循环还可引用多个变量
for x, y, z in [(1, 1, 3), (2, 4, 4), (3, 9, 3)]:
print(x, y, z)
结果:
1 1 3
2 4 4
3 9 3
之后的字典即可用这种方法访问
3.对list
实现下标和值的循环,可用enumerate
函数,可和之后的for循环访问字典对比理解。
代码:
for index, value in enumerate(['A', 'B', 'C']): # 类似dict.items
print(index, value)
结果:
0 A
1 B
2 C
1.函数range()
的使用
代码:
for number in range(0,5): #从第一个参数开始,到第二个参数前结束 等同于 range(5)
print(number)
结果:
0
1
2
3
4
代码:
for number in range(0,11,2): #从第一个参数开始,到第二个参数前结束,每次循环+2
print(number)
结果:
0
2
4
6
8
10
range()
创建数字列表,通过list()
函数min()
max()
sum()
代码:
numbers = list(range(2,12,4))
print(numbers)
结果:
[2, 6, 10]
e.g. 创建列表,包含前10个数的平方
代码:
numbers = []
for number in range(1,11):
numbers.append(number**2)
print(numbers)
print(min(numbers))#最小值
print(max(numbers))#最大值
print(sum(numbers))#和
结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
1
100
385
2.列表解析
代码:
result = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print(result)
结果:
[4, 16, 36, 64, 100]
还可使用双层循环
代码:
result = [m + n for m in 'ABC' for n in 'DEF']
print(result)
结果:
['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF']
切片即列表的部分元素,如下
代码:
gourds = ['dawa','erwa','sanwa','siwa','wuwa','liuwa','qiwa']
print(gourds[0:0])#从下标0开始,到下标0前结束
print(gourds[1:2])#从下标1开始,到下标2前结束
print(gourds[1:-1])#从下标1开始,到倒数第一个前结束
print(gourds[:-2])#从开始,到倒数第二个前结束
print(gourds[1:])#从下标1开始,到结束
print(gourds[:5:2]) #从下标0开始,到5前结束,每2个取一次值
结果:
[]
['erwa']
['erwa', 'sanwa', 'siwa', 'wuwa', 'liuwa']
['dawa', 'erwa', 'sanwa', 'siwa', 'wuwa']
['erwa', 'sanwa', 'siwa', 'wuwa', 'liuwa', 'qiwa']
['dawa', 'sanwa', 'wuwa']
遍历切片同遍历列表相同,可用for循环
复制列表的方法
代码:
gourds = ['dawa','erwa','sanwa','siwa','wuwa','liuwa','qiwa']
fake_gourds = gourds[:]#使用切片的形式复制,从0开始到末尾
gourds.append('yeye')#原列表和新列表添加不同字段打印
fake_gourds.append('shejing')
print(gourds)
print(fake_gourds)
结果:
['dawa', 'erwa', 'sanwa', 'siwa', 'wuwa', 'liuwa', 'qiwa', 'yeye']
['dawa', 'erwa', 'sanwa', 'siwa', 'wuwa', 'liuwa', 'qiwa', 'shejing']
元组和字符串也可以有切片,用法相同,字符串可用切片来截取字符,类似java
语言的substring
函数等。
列表适合存储在程序运行期间可能变化的数据,可修改,元组与列表相同,但使用圆括号,且元组的元素值(实际上是元素值的指向)不能修改.
代码:
RMB = (1,5,10,20,50,100)
print(RMB[0])
print(RMB[-1])
结果:
1
100
元组的元素值不能直接修改
代码:
RMB[0] =3
结果:
TypeError: 'tuple' object does not support item assignment
但是可以直接重新给整个元组赋值
代码:
RMB = (1,5,10,20,50,100)
RMB = (900,1)
print(RMB)
结果:
(900, 1)
遍历元组同遍历列表一样,用for循环
注意:
定义只有一个数字的元组的时候不能写成RMB = (100)
,这样写容易与数学符号扩号混淆,会按照括号处理,所以定义一个数字的元组的时候加上,
(逗号)例如:RMB = (100,)
代码:
RMB = (100,)
print(RMB)
结果:
(100,)
结果中也会带上逗号
如果元组中含有list
,list的值可以更改,例如:
代码:
RMB = (100, ['aaa', 'bbb'])
print(RMB)
RMB[1][0] = 'ccc' #元组里的list指向没有变,变得是所指向的list里存的值
RMB[1][1] = 'ddd'
print(RMB)
结果:
(100, ['aaa', 'bbb'])
(100, ['ccc', 'ddd'])