day06
1、列表的索引操作:
语法:
列表[整数表达式]
用法:
等同于字符串的索引
索引分正向索引和反向索引,规则与字符串规则完全相同
示例:
L = list(‘ABCD’)
print(L[1]) #B
列表的索引赋值
列表是可变的,可以通过索引赋值改变列表中的元素
示例:
L = [1.2.3.4]
L [2] = 3.1
print(L)
#[1. 2. 3.1. 4]
列表的切片赋值
语法:
列表[:]
列表[: :]
说明:
列表的切片取值返回一个列表,规则等同于字符串切片规则
示例:
x = list(rangge(10))
y = x[1:9:2] #奇数
y = x[1::2] #复制x列表 从中间切开,最后把剩下的部分打印出来
#结果就是从1 开始 每隔一个(步长为2)就是3 。5最终的得数
列表的切片赋值
语法:
列表[切片slice] = 可迭代对象
作用:
可以改变原列表的排序, 可以插入数据和修改数据
可以用切片改变列表对应的元素的值
说明:
切片的赋值运算符(=)的右侧必须是一个‘可迭代对象’
示例:
L = [2.3.4]
L [1:2] = [3.1,3.2] # L = [2, 3.1, 3.2, 4]
L[:1] = [1.1,2.2] # L = [1.1, 2.2, 3.1, 3.2]
切片的注意事项:
对于步长不等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[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]
L = [3,5]
print('原列表的id=',id(L))
L[1:1] = [4]
print('插入4 后的L=',L,id(L))
L[0:0] = [1,2]
print('插入1,2后的L=',L,id(L))
L[5:0] = [6]
print('插入6后的L=',L,id(L))
L2 = L [::-1]#先反转
L[:] = L2
print('反转后L=',L,'id =',id(L))
已知有列表:
L = [6,8]
用索引和切片操作将原列表L 改变为:
L = [1,2,3,4,5,6,7,8,9]
l = [6,8]
l[1:1] = [7]
print('插入7后的l=',(l))
l[:0] = [1,2,3,4,5]
print('插入12345的l=',(l))
l[8:0] = [9]
print('8=l',(l))
python3中常用的序列函数
len(x) 返回序列的长度
max(x) 返回序列的最大值元素
min(x) 返回序列的最小值元素
---------以上是以前学的------------
sum(x) 返回序列中所有元素的和(元素必须是数字)
any(x) 针织测试,如果列表中的其中一个元素为真值,则返回Ture
all(x) 真值测试,如果列表中的所有元素都为真值,则返回Ture,否则返回False
示例:
L = [1,7,0,3,2]
print(len(L)) #5
print(lmax(L)) #7
print(min(L)) #0
2、Python3中常用的列表方法(method)
见:help(list)
方法 意义
L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结束索引,当 value 不存在时触发ValueError错误
L.insert(index, obj) 将某个元素插放到列表中指定的位置
L.count(x) 返回列表中元素的个数
L.remove(x) 从列表中删除第一次出现在列表中的值
L.copy() 复制此列表(只复制一层,不会复制深层对象)
L.append(x) 向列表中追加单个元素
L.extend(lst) 向列表追加另一个列表
L.clear() 清空列表,等同于 L[:] = []
L.sort(reverse=False) 将列表中的元素进行排序,默认顺序按值的小到大的顺序排列
L.reverse() 列表的反转,用来改变原列表的先后顺序
L.pop([index]) 删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回删除元素的引用关系
练习:
写一个程序,输入 很多个正整数,当输入小于零的数时结束输入
1)打印这些数的和
2)打印出这些数中最大的一个数
3)打印这些数中的第二大的一个数
4)删除一个最小的数
l = list()
while True:
a = int(input('请输入整数(小于零结束):'))
if a < 0:
break
l.append(a)
print('您输入的是:',l)
print('这些数的和为:',sum(l))
l.sort(reverse=True)
print('这些数最大的一个数为:',l[0])
print('您输入的第二个大的数为:',l[1])
l.pop()#l[-1]
print('最后的列表为:',l)
3、sorted 函数:
用于生成一个排序后的列表
格式:
sorted (iterable,reverse= False)
revenue(seq) 返回原序列反序的可迭代对象
示例:
l = [7, 9, 5, 1, 3]
l2 = sorted(l)
4、 字符串的文本解析方法 split 和 join 方法
S.split(sep = None)
将字符串使用sep作为分隔符分割s字符串,返回分割后的字符串列表,当不给定参数时默认用空白字符串作为分割符分割
S.join (iterable)用可迭代对象中提供的字符串,返回一个中间用s 进行分割的字符串(连接)
示例:
s = ‘Beijing is capital’
L = s.split(‘ ’)# ['Beijing' , ' is', 'capital']
L = [" C: ", " Windows ", "system32"]
S = '\\' . join (L) # s = r "C:\windows\Systtem32"
5、深拷贝(deep copy)和浅拷贝 (shallow copy)
浅拷贝 (shallow copy)(容易出现数据冲突)
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = 1.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]]
说明:
浅拷贝是指在复制过程中,只复制一层变量,不会复制深层绑定的对象的复制过程
深拷贝(deep copy)(真正的数据对象的各自独立)
对所有可变对象进行层层复制,实现对象的各自独立
例:
import copy # 导入复制模块
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = 1.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]] # 次列表不受影响
4、列表推导式 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内奇数的列表
解答:
L = [x for x in range(1,100,2)]
print(L)
# 用带有if的列表推导式
[x for x in range (100) if x % 2 ==1]
6、列表推导式的嵌套:
语法:
[表达式
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"]
练习:
1.已知用户输入的字符串是以逗号分隔开的数据
如:
s = ‘100,200,300,500,800,’
使用程序算法将其转化为数字的列表
L = [100,200,300,500,800]
2.有一些数存在于列表中,如:
L = [1,3,2,1,6,4,2,...98,82]
将列表中的数字存入到另外一个列表L2中,
要求:
重复出现多次的数字只在列表L2中保留一份
3.生成前40个裴波那数
1 1 2 3 5 8 13 .。。。
将这40个数保存在列表中
裴波那书是 前两个是1,从第三个起是前面两个数的和
答案:#1
1. s = '100,200,300,400,500,600'
l_a = s.split(',')
print("l_s=",l_a)
L = [ ]
for x in l_a:
L.append(int(x))
#2
L = [1,3,2,1,6,4,2,...98,82]
L2 = [ ]
for x in l :
if x not in l2:
l2.append(x)
#3
a = 1#倒数第二个
b = 1#倒数第一个
L = [a,b]
while len(L) < 40:
#计算出下一个数
c = a + b
#加入到列表L
L.append(c)
#移动b 和 c
a,b = b,c #让a还是指向倒数第二个
print('结果是',L)
方法2
a = 0#倒数第二个
b = 1#倒数第一个
L = []
while len(L) < 40:
L.append(b)
c = a + b
a,b = b,c
print('结果是',L)
方法3
L = [1,1]
while len(L) < 40:
L.append(L[-1]+L[-2])
print('结果是',L)