Chapter4 操作列表
4.1 for循环的使用
4.1.1 这是一个利用循环打印的例子:
代码语言:javascript复制a = ['a','b','c','d']
for an in a: #冒号必不可少
print(an)
代码语言:javascript复制a
b
c
d
4.1.2 利用for循环进行更多操作的例子:
代码语言:javascript复制a = ['a','b','c','d']
for an in a: #冒号必不可少
print(f"{an.title()} is uppercase of {an}")
print("next char is:n")
代码语言:javascript复制A is uppercase of a
next char is:
B is uppercase of b
next char is:
C is uppercase of c
next char is:
D is uppercase of d
next char is:
结果说明: 缩进的都属于for循环 an相当于计数器变量作索引的a[i]。
4.1.2 在for循环结束后执行操作
代码语言:javascript复制a = ['a','b','c','d']
for an in a: #冒号必不可少
print(f"{an.title()} is uppercase of {an}")
print("test end.") #当缩进没有的时候,默认为在for循环之外。
代码语言:javascript复制A is uppercase of a
B is uppercase of b
C is uppercase of c
D is uppercase of d
test end.
4.2 避免缩进错误
4.2.1 忘记缩进
代码语言:javascript复制a = ['a','b','c','d']
for an in a:
print(an)
代码语言:javascript复制 File "/var/folders/1j/k13fttf13b5d6j8_m4q12rgr0000gn/T/ipykernel_49995/1502029580.py", line 3
print(an)
^
IndentationError: expected an indented block
当没有缩进时,for循环找不到循环体,会报错。
原则:需要进循环体的加缩进,不需要的不加缩进,没有for循环不缩进,for循环不忘冒号
4.3 创建数值列表
4.3.1 range()和list()
range()的三个用法:
range(x) 和 range(0,x)一样 range(x,y) range(x,y,z)
代码语言:javascript复制list(range(6)) #相当于默认从0开始数6个
代码语言:javascript复制[0, 1, 2, 3, 4, 5]
代码语言:javascript复制list(range(0,6)) #指定从0开始数6个
代码语言:javascript复制[0, 1, 2, 3, 4, 5]
代码语言:javascript复制list(range(3,12)) #相当于从3到12,步长为1,注意右括号12实际数到11
代码语言:javascript复制[3, 4, 5, 6, 7, 8, 9, 10, 11]
代码语言:javascript复制list(range(3,12,2))#步长为2
代码语言:javascript复制[3, 5, 7, 9, 11]
4.3.2 用range()创建数字列表
打印1-10的偶数
代码语言:javascript复制even_num = list(range(2,11,2)) #注意,左边从2开始,右边界限为11(左面取得到,右面够不到)
print(even_num)
代码语言:javascript复制[2, 4, 6, 8, 10]
创建一个列表,包含1-10的平方
代码语言:javascript复制square_list = [] #先创建一个空列表
for value in range(1,11):
square = value ** 2 #每一次线计算一下平方的值,再append到list里面
square_list.append(square)
#上面两行可以写成: spuare_list.append(value ** 2)
print(square_list)
代码语言:javascript复制[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.3.3 对数字列表执行简单的统计计算
找数字列表(元素为数字) 的 最大值、最小值、总和
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
print(max(digits))
print(min(digits))
print(sum(digits))
代码语言:javascript复制9
0
45
4.3.4 列表解析
代码语言:javascript复制#上面输入平方数的例子还可以用两行代码解决:
square_list = [value ** 2 for value in range (1,11)]
#本质是把一个列表转换成另一个列表
#格式:列表1 = [表达式 for 变量 in 列表2]
print(square_list)
代码语言:javascript复制[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.4 使用列表的一部分
使用切片
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
print(digits[0:3])
代码语言:javascript复制[1, 2, 3]
切片使用方法: 列表[起点:终点]
如果写成 列表[:终点],起点默认索引为0; 如果写成 列表[起点:],则默认重点到列表最后一个
如何打印最后三个元素?
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
print(digits[-3:])
代码语言:javascript复制[8, 9, 0]
列表[-倒数几个:]
每间隔两个元素就提取一个(在选取范围内)
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
print(digits[0:10:2])
代码语言:javascript复制[1, 3, 5, 7, 9]
[起点:重点:步长],步长不输入(没有第二个冒号)默认为1.
遍历切片:使用for循环 切片
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
print("No 5 to No 9 number in my digits are:n")
for digit in digits[4:8]: #利用单复数区别 列表 和 an
print(digit)#注意这里打印的是变量
代码语言:javascript复制No 5 to No 9 number in my digits are:
5
6
7
8
复制列表 (使用切片)
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
copy_digits = digits[:]
digits.append(10)
copy_digits.append(11)
print(digits)
print(copy_digits)
代码语言:javascript复制[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11]
注意语法: 列表1 = 列表2[:]
这样才是两个列表
如果没有切片直接复制
则两个列表指向同一个储存空间,本质上是一个列表
代码语言:javascript复制digits = [1,2,3,4,5,6,7,8,9,0]
copy_digits = digits
digits.append(10)
copy_digits.append(11)
print(digits)
print(copy_digits)
代码语言:javascript复制[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11]
4.5 元组-不可改变的列表
定义语法:
元组名 = (元素1,元素2,…)
访问和列表相同
代码语言:javascript复制a = (30,40)
print(a[0])
print(a[1])
代码语言:javascript复制30
40
不能改变:指不能单独给其内元素赋值。(报错)
代码语言:javascript复制a = (30,40)
a[0] = 1
代码语言:javascript复制---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/1j/k13fttf13b5d6j8_m4q12rgr0000gn/T/ipykernel_53119/1136073212.py in <module>
1 a = (30,40)
----> 2 a[0] = 1
TypeError: 'tuple' object does not support item assignment
遍历元组-和for循环
代码语言:javascript复制a = (30,40,50)
for an in a:
print(an)
代码语言:javascript复制30
40
50
修改元组变量-重新定义
代码语言:javascript复制a = (30,40)
print(a)
a = (40,50)
print(a)
代码语言:javascript复制(30, 40)
(40, 50)