list()--->创建一个空列表[]
list(可迭代对象)--->使用可迭代对象创建一个列表:list("Chinese") list([1,2,3,4,5]) list(range(1,10))
2.列表的运算:
+ += * *=
+= 运算符的格式需要特别注意:
绑定列表的变量 += 可迭代对象
L += [1, 2, 3, 4]
L += 'abcdef'
L += range[1,10]
L += ['123']----------->'123'作为整体的一个元素,添加到列表末尾
成员运算符(in/not in)---->列表包含对象则返回True:“Alex” in ["Alex","Thomas","Nore"]
逻辑运算:and or not---->s = input(Please enter:) or 'q'
3.列表切片:列表[切片slice] = 可迭代对象
语法:a[起始:结束:步长]---->省略步长时,默认为1
作用:创建新列表,复制列表([:]),切片赋值
列表切片赋值(增删插改):
①一次修改多个元素:a[1:4] = [5,6,9]
②增加列表元素:a[2:] = [5,4,3,2,6,7...]
③在不替换任何列表元素的情况下,为列表插入新元素:a[2:2] = ["a","b"]
④删除列表元素:a[1:6] = []
4.常用列表函数:
len():返回列表长度
min():返回列表中的最小值
max():返回列表中的最大值
sum():返回列表中所有元素的和---->格式:sum(列表[,起始值])起始值缺省为0,即从0开始叠加
5.列表方法:help(list)
index():得到列表中某个元素的索引(下标),在没找到时返回异常
语法:L.index(value[,begin[,end]])
count():得到列表中对应元素的个数
语法:L.count(obj)
append():向列表添加元素,返回值为None
语法:L.append(obj)
extend():向列表追加另一个列表,返回值为None
语法:L.extend(可迭代对象)
insert():向列表指定位置插入元素,返回值为None
语法:L.insert(index,onj)
pop():删除索引对应的元素,缺省时删除末尾元素。pop()方法存在返回值,返回值为弹出的元素
语法:L.pop([index])
remove():删除列表中第一次出现的value,返回值为None
语法:L.remove(value)
题外话:del语句删除列表元素---->del l[3] del l[-2:-1] del a 均是正确的表达
copy():浅拷贝列表:只拷贝一层,不会拷贝深层对象,相当于L[::]
语法:L.copy()
reverse():反转列表的排列顺序,返回值为None--->还可以使用切片翻转排序:L[::-1]
语法:L.reverse()
sort():按顺序重新排列列表元素,返回值为None(sort()方法对列表的修改是永久性的,sorted()函数是临时的)
语法:L.sort([reverse=False/True])---->缺省时reverse=False,排列顺序从小到大;reverse=True时,排列顺序从大到小
clear():清空列表,相当于l[:] = []---->此时id(l)的值不变(l = []相当于重新绑定对象,id(l)的值也会变)
语法:L.clear()
6.浅拷贝及深拷贝概念区分
1)浅拷贝:
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = L1.copy() #浅拷贝
print(L1)
print(L2)
L[0] = 3.14
print(L1) #[1,2,[3.14,3.2]]
print(L2) #[1,2,[3.14,3.2]]
说明:浅拷贝是指在复制过程中,只复制一层变量,不会复制深层的变量绑定的对象的复制过程
2) 深拷贝:
对所有可变对象进行层层复制,实现对象的各自独立。(Python中可变数据类型一共由4类)
import copy
L = [3.1, 3.2]
L1 = [1, 2, L]
L2 = copy.deepcopy(L1) #实现深拷贝
print(L1)
print(L2)
L[0] = 3.14
print(L1) #[1,2,[3.14,3.2]]
print(L2) #[1,2,[3.1,3.2]]------>此层不受影响(包含深层列表时,为避免数据冲突,需要使用深拷贝)
3) 注意点:
L1 = [1, 2, 3, 4]
L2 = L1------------>将2个变量绑定到同一个列表对象,并没有复制列表
L2[0] = 100 则 L1[0] == 100
L3 = L1.copy-------浅拷贝,只复制一层
创建一个新的列表,但每个元素和原列表中的变量绑定的是同一个对象
pop()存在返回值,remove() 和 append()均不存在返回值。pop实质是从列表里拿一个出来,拿出来之后还可以继续使用
S.split(sep=None) 将字符串使用sep作为分隔符分割S字符串,返回分割后的字符串列表。缺省时使用空白字符串
S.join(iterable) 用可迭代对象中提供的字符串,返回一个中间用S分割的字符串----->用字符串把可迭代对象粘成一个字符串
示例:
s = "Beijin is capital"
L = s.split(' ') #L = ['Beijin', 'is', 'capital']---->作为分隔符的符号会被删除,不会包含在生成的列表中
L = ["C:", "windows", "System32"]
s = '\\'.join(L) #s=r'C:\windows\System32'-------->交互模式下输出的是'C:\\windows\\System32',是计算机中使用的样子,\\代表一个\
8.深拷贝 浅拷贝 不拷贝
深拷贝:import copy
L2 = copy.deepcopy(L)
浅拷贝:
L2 = L.copy()
L2 = L[::]
不拷贝:
L2 = L #将两个变量绑定到了同一个对象,完全没有复制任何东西