day06
列表 list
有序的序列容器
创建列表的方法:
[]
[1,2,3,4]
list()
list(range(10))
列表的构造函数:
List()
List(可迭代对象)可迭代对象只能有一个
列表的运算
算术运算:
+ * += *=
比较运算:
< <= > >= == !=
in/ not in 运算符
+= 运算符:
绑定列表的变量 += 可迭代对象
L= [1,2,3]
L+= [4,5,6]
L+= '789'
L+= range(10, 13)
列表的索引操作:
语法:
列表[整数表达式]
用法:
等同于字符串的索引
索引分正向索引和反向索引,规则与字符串规则完全相同
示例:
L= list("ABCD")
print(L[1]) # B
列表的索引赋值
列表是可变的,可以通过索引赋值改变列表中的元素
语法:
列表[整数表达式]=表达式
示例
L =[1, 2, 3, 4]
L[2] = 3.1
print(L)
列表的切片
语法:
列表[:]
列表[::]
说明:
列表的切片取值返回一个列表,规则等同于字符串切片规则
示例:
x= list(range(10))
y= x[1:9:2] # 奇数
y= x[::] # 复制x列表
列表的切片赋值
语法:
列表[切片slice] = 可迭代对象
作用:
可以改变原列表的排列,可以插入数据和修改数据
可以用切片改变列表对应的元素的值
说明:
切片的赋值运算符(=)的右侧必须是一个"可迭代对象"
切片注意事项:
对于步长不等1的切片赋值,赋值运算符的右侧的可迭代对象提供的数据元素的个数一定要等于切片切出的段数
例如:
L= [1, 2, 3, 4, 5, 6]
L[::2] = 'ABC' # 正确
L[::2] = 'ABCDE' # 错误
del 语句:
del可以用来删除列表元素
语法:
del 列表[索引]
del 列表[切片]
示例:
L= [1, 2, 3, 4, 5, 6]
del L[1]
del L[2]
del L[-1]
L= [1, 2, 3, 4, 5, 6]
del L[::2]
练习:
已知有列表:
L= [3, 5]
用索引和切片操作将原列表L改变为:
L = [1, 2, 3, 4, 5, 6]
将原列表反转, 删除最后一个元素
打印此列表:
print(L) # [6, 5, 4, 3, 2]
python3中常用的序列函数
len(x) 返回序列的长度
max(x) 返回序列的最大值元素
min(x) 返回序列中最小值元素
------以上是以前学过的------
sum(x) 返回序列中所有元素的和(元素必须是数字)
any(x) 真值测试, 如果列表中的其中一个元素 为真值,则返回True
all(x) 真值测试, 如果列表中的所有元素都为n真值, 则返回True,否则返回False
示例:
L= [1, 7, 0, 3, 2]
print(len(L)) # 5
print(max(L)) # 7
print(min(L)) # 0
print(sum(L)) # 13
print(any(L)) # True
print(all(L)) # False
练习:
1. 输入三个数存于列表中,打印这三个数的最大值,最小值和平均值
2. 写程序,让用户循环输入一些整数,当输入-1时结束输入,将这些整数存于列表L中
1) 打印您共输入了几个有效的数?
2) 打印您输入的数有最大数是多少?
3) 打印您输入的数的最小数是多少?
4) 打印您输入的这些数的平均值
python3中常用的列表方法(method)
详见:
>>> help(list)
文档见:
python_base_docs_html/list.html
练习:
写一个程序。输入很多个正整数,当输入小于零的数时结束输入
1) 打印这些数的和
2) 打印出这些数中最大的一个数
3) 打印这些数中第二大的一个数
4) 删除最小的一个数
sorted 函数:
用于生成一个排序后的列表
格式:
sorted(iterable, reverse=False)
reversed(seq) 返回原序列反序的可迭代对象
示例:
L =[7, 9, 5, 1, 3]
L2= sorted(L) # L2 = [1, 3, 5, 7, 9]
L3= sorted(L, reverse=True) # L3 = [9, 7,5, 3, 1]
forx in reversed(L):
print(x) # 3 1 5 9 7
字符串的文本解析方法 split 和 join方法
S.split(sep=None) 将字符串使用sep作为分隔符分割S字符串,返回分割后的字符串列表,当不给定参数时默认用空白字符作为分隔符分割
S.join(iterable) 用可迭代对象中提供的字符串,返回一个中间用S进行分隔的字符串
示例:
s= 'Beijing is capital'
L= s.split(' ') # L = ['Beijing', 'is','capital']
L= ["C:", "Windows", "System32"]
s= '\\'.join(L) #s=r"C:\Windows\System32"
深拷贝 deep copy 和浅拷贝 shallow copy
浅拷贝 shallow copy
L =[3.1, 3.2]
L1= [1, 2, L]
L2= L1.copy() # 浅拷贝,只复制一层
print(L1) # [1, 2, [3.1, 3.2]]
print(L2) # [1, 2, [3.1, 3.2]]
L[0] = 3.14
print(L1) # [1, 2, [3.14, 3.2]]
print(L2) # [1, 2, [3.14, 3.2]]
说明:
浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
深拷贝
对所有可变对象进行层层复制,实现对象的各自独立
注意:
深拷贝通常只对可变对象进行复制,不可变对象通常不会复制
L1=[1,2,[3.1,3.2]]
L2=L1 不拷贝,创建一个变量同时绑定对象
L3=L1.copy() 浅拷贝 等同于L3=L1[:]
Import copy
L4=copy.deepcopy(L1) 深拷贝
例:
import copy # 导入复制模块
L =[3.1, 3.2]
L1= [1, 2, L]
L2= copy.deepcopy(L1) # 实现深拷贝
print(L1) # [1, 2, [3.1, 3.2]]
print(L2) # [1, 2, [3.1, 3.2]]
L[0] = 3.14
print(L1) # [1, 2, [3.14, 3.2]]
print(L2) # [1, 2, [3.1, 3.2]] #此列表不受影响
列表推导式 list comprehesion
列表推导式是用可迭代对象依次生成带有多个元素的列表的表达式
作用:
用简易方法生成列表
语法:
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 真值表达式]
示例:
#生成一个列表,此列表内的数值是1~9的方平
L= [x ** 2 for x in range(1, 10)]
#以前的方法:
L= []
for x in range(1, 10):
L.append(x ** 2)
练习:
用列表推导式生成 1 ~100 内奇数的列表
答:
1. [x * 2 + 1 for x in range(50)]
2. [x for x in range(1, 100, 2)]
# 用带有if的列表推导式
[x for x in range(100) if x % 2 ==1]
列表推导式的嵌套:
语法:
[表达式
for 变量1 in 可迭代对象1 if 真值表达式1
for 变量2 in 可迭代对象2 if 真值表达式2
...]
示例:
用字符串"ABC"和 "123" 生成如下列表:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
L= [x + y for x in "ABC" for y in "123"]