7.19_python_lx_day8_list

一.列表的相关操作

(1)列表的拼接 (同元组)
(2)列表的重复 (同元组)
(3)列表的切片 (同元组)
  语法 => 列表[::] 完整格式:[开始索引:结束索引:间隔值]
    (1)[开始索引:] 从开始索引截取到列表的最后
    (2)[:结束索引] 从开头截取到结束索引之前(结束索引-1)
    (3)[开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
    (4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
    (5)[:]或[::] 截取所有列表
    (4)列表的获取 (同元组)
    (5)列表的修改 ( 可切片 )
    (6)列表的删除 ( 可切片 )

(1)列表的拼接 (同元组)

1 lst1 = [1,2,3]
2 lst2 = [4,5,6,6]
3 res = lst1 + lst2
4 print(res)#[1, 2, 3, 4, 5, 6, 6]

(2)列表的重复   (同元组)

lst= [1,2,3]
res = lst*3
print(res)#[1, 2, 3, 1, 2, 3, 1, 2, 3]

(3)列表的切片   (同元组)

<1>[开始索引:]  从开始索引截取到列表的最后

1 lst = ['a','b','c','d','e','f','g']
2 res = lst[2:]#2 3 4 5 6.....
3 print(res)#['c', 'd', 'e', 'f', 'g']

<2>[:结束索引]  从开头截取到结束索引之前(结束索引-1)

1 lst = ['a','b','c','d','e','f','g']
2 res = lst[:4] #0 1 2 3
3 print(res)# ['a', 'b', 'c', 'd']

<3>[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)

1 lst = ['a','b','c','d','e','f','g']
2 res = lst[4:6]
3 print(res)#['e', 'f']

<4>[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值

1 lst = ['a','b','c','d','e','f','g']
2 # 正向截取
3 res = lst[::2] # 0 2 4 6 8  ... 
4 print(res)#['a', 'c', 'e', 'g']
5 # 逆向截取
6 res = lst[::-2] # -1 -3 -5 -7 -9
7 print(res)#['g', 'e', 'c', 'a']

<5>[:]或[::]  截取所有列表

1 lst = ['a','b','c','d','e','f','g']
2 res = lst[:]#['a', 'b', 'c', 'd', 'e', 'f', 'g']
3 res = lst[::]#['a', 'b', 'c', 'd', 'e', 'f', 'g']
4 print(res)

(4)列表的获取   (同元组)

1 #        0       1        2        3       4     5        6    7
2 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]
3 #       -8      -7        -6     -5       -4     -3      -2    -1
4 res = lst[7]#lx
5 res = lst[-1]#lx
6 print(res)

(5)列表的修改   ( 可切片 )

要求的数据类型是可迭代性数据(容器类型数据,range对象,迭代器)

<1>利用切片可以一次修改多个元素,没有个数上的限制

1 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]
2 lst[3:5] = ["cd","ab","sb刘子豪"]
3 print(lst)#['吕洞宾', '何仙姑', '铁拐李', 'cd', 'ab', 'sb刘子豪', '蓝采和', '韩湘子', 'lx']

<2>切片配合步长,切出多少个元素,修改多少个元素

1 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","王文"]
2 lst[::2] = range(1,5) # 0 2 4 6 8 10 .....
3 print(lst)#[1, '何仙姑', 2, '曹国舅', 3, '蓝采和', 4, '王文']

(6)列表的删除   ( 可切片 )

1 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]
2 del lst[-1]
3 print(lst)#['吕洞宾', '何仙姑', '铁拐李', '曹国舅', '张果老', '蓝采和', '韩湘子']

注意:

删除的是变量res本身,不是列表中的元素

1 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]
2 res = lst[-1] #lx
3 del res
4 print(lst)#["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]

del lst[::3]

1 lst = ["吕洞宾","何仙姑","铁拐李","曹国舅","张果老","蓝采和","韩湘子","lx"]
2 del lst[::3] # 0 3 6 9 12 ...
3 print(lst)#['何仙姑', '铁拐李', '张果老', '蓝采和', 'lx']

元组中的列表,里面的元素可以修改

1 tup = (1,2,3,[4,5,6,(7,8,9)])
2 tup[-1][1] = 6666
3 print(tup)#(1, 2, 3, [4, 6666, 6, (7, 8, 9)])

二.列表相关的函数

(1)append 向列表的末尾添加新的元素

1 lst = ['a']
2 lst.append('b')
3 print(lst)#['a', 'b']

(2)insert 在指定索引之前插入元素

1 lst=['a','b']
2 lst.insert(1,'c')
3 print(lst)#['a', 'c', 'b']

(3)extend 迭代追加所有元素

要求:数据的类型是可迭代性数据

1 lst = ['a']
2 strvar = 'bcdefg'
3 lst.extend(strvar)
4 print(lst)# ['a', 'b', 'c', 'd', 'e', 'f', 'g']

(1)pop  通过指定索引删除元素,若没有索引移除最后那个

1 lst=['a','b','c','d','e']
2 lst.pop(0)#['b', 'c', 'd', 'e']
3 lst.pop() #['a', 'b', 'c', 'd']
4 print(lst)

(2)remove 通过给予的值来删除,如果多个相同元素,默认删除第一个

1 lst=['a','b','c','d','e']
2 lst.remove('c')
3 print(lst) #['a', 'b', 'd', 'e']

(3)clear 清空列表

1 lst=['a','b','c','d','e']
2 lst.clear()
3 print(lst)#[]

改查(参考:列表的相关操作)

其他函数

(1)index 获取某个值在列表中的索引

1 lst=['a','b','c','d','e']
2 lst.index('d')
3 print(lst)#3

(2)count 计算某个元素出现的次数

重点区别:

字符串里面的count 可以划定范围,列表里面的count不行

1 lst=['a','b','c','d','e','b','b','f','b']
2 res=lst.count('b')
3 print(res)#4

(3)sort() 列表排序(默认小到大排序)

1 lst = [44,99,1,10,3,-5,-90]
2 lst.sort()
3 print(lst)#[-90, -5, 1, 3, 10, 44, 99]

sort(reverse=True)  从大到小排序

1 lst=[-90, -5, 1, 3, 10, 44, 99]
2 lst.sort(reverse=True)
3 print(lst)#[99, 44, 10, 3, 1, -5, -90]

排序英文 (ascii 编码)一位一位进行比较,在第一位相同的情况下,比较第二位,以此类推

也可以对中文进行排序!(无规律可循)

(4)reverse() 列表反转操作

1 lst = ["lx","刘德华","郭富城","张学友"]
2 lst.reverse()
3 print(lst)#['张学友', '郭富城', '刘德华', 'lx']

三.浅拷贝 和 深拷贝

总结:
  (1)浅拷贝只拷贝一级容器中的所有数据
  (2)深拷贝拷贝所有层级的所有元素
  浅拷贝速度比深拷贝速度快


  深拷贝在执行时: 如果是不可变数据,地址会暂时的指向原来数据,
           如果是可变数据,直接开辟新空间


  不可变数据: Number str tuple
  可变数据 : list set dict

先引入模块

import copy

(1)浅拷贝

 方法一 copy.copy 模块.方法

1 lst1 = [1,2,3]
2 lst2 = copy.copy(lst1)
3 print(lst2)#[1, 2, 3]

方法二  列表.copy()

1 lst1 = [1,2,3]
2 lst2 = lst1.copy()
3 print(lst2)#[1, 2, 3]

 (2)深拷贝 copy.deepcopy

1 lst1 = [1,2,3,[4,5,6]]
2 lst2 = copy.deepcopy(lst1)
3 print(lst2)#[1, 2, 3, [4, 5, 6]]
原文地址:https://www.cnblogs.com/Magicianlx/p/13338962.html