1.两种赋值方式不同。
浅复制:原列表和新列表并没有完全分离开,对新列表的引用进行修改,导致了原列表的引用也发生了改变,并且两者引用的内存地址都一样。改变原来列表
a=b,此外li.reverse(),li.sort()这类列表的方法都是会改变原列表数据
>>> a=[1,2,3] >>> b=a >>> b [1, 2, 3] >>> a.append(4) >>> a [1, 2, 3, 4] >>> b [1, 2, 3, 4] | >>> li=[1,3,2,4] >>>l2=li.sort(reverse=False) >>> l2 -- l2没有值 >>> li [1, 2, 3, 4] sort方法是排序,reverse默认为False时为升序 | >>> li=[1,2,3,4] >>> l2=li.reverse() >>> l2 >>> li [4, 3, 2, 1] |
深复制:原列表和新列表完全分离开,对新列表的引用进行修改,不会使原列表的引用发生变化。不改变原来列表
a=b.copy()、y=x[:],此外reversed(li),sorted(li)这类列表的函数生成的新列表不会改变原列表数据
>>> a=[1,2,3,4] >>> a=b.copy() >>> a.append(5) >>> a [1, 2, 3, 4, 5] >>> b [1, 2, 3, 4] | >>> x=[1,2,3] >>> y=x[:] >>> x.append(4) >>> x [1, 2, 3, 4] >>> y [1, 2, 3] | >>> li=[1,3,2,4] >>> l2=sorted(li,reverse=True) >>> li [1, 3, 2, 4] >>> l2 [4, 3, 2, 1] | >>> li=[1,2,3,4] >>> l2=reversed(li) >>> list(l2) [4, 3, 2, 1] >>> li [1, 2, 3, 4] |
注:使用函数修改列表必须使用赋值给其他列表,使用列表方法来修改函数,会直接修改原函数
2.切片(左闭右开,顺序看步长)
切片取值:
li=[0,1,2,3,4,5,6] | 结果 |
print(li[2:]) print(li[:5:1]) print(li[:-5:-1]) =li[-1:-5:-1] print(li[::-1]) | [2, 3, 4, 5, 6] [0, 1, 2, 3, 4] [6, 5, 4, 3] [6, 5, 4, 3, 2, 1, 0] |
特殊情况:
1.当超出列表范围切片取值,以及切片没有交集时都是返回[],不会报错
2.当超出列表范围进行索引取值,则会报错
>>> li=[1,2,3] >>> li[5:0] --切片超出索引范围 [] >>> li[-1:1] --没有交集,无法切片取值 [] >>> li[5] --取值超出索引范围 报错 |
使用索引替换列表元素:
1.可以使用索引修改单个列表元素,一次只能修改一个列表元素:li[2]=4
2.使用切片同时修改连续的多个列表元素为一个数组数据类型(str,set,tuple,dict,list)不会报错 但是修改多个列表元素为一个数值则会报错 li[1:]=2
>>> li [1, 2, 3] >>> li[2]=4 | >>> li [1, 2, 4] >>> li[:]=[1,2,3,2,3] >>> li [1, 2, 3, 2, 3] >>> li[1:]=[1,1,1,1] >>> li [1, 1, 1, 1, 1] | >>> li=[1,2,3] >>> li[:]=(1,2) >>> li [1, 2] >>> li[:]={1,2,222} >>> li [1, 2, 222] >>> x[:]="str" >>> x ['s', 't', 'r' | 几种报错的情况: 1.切片的步长不为1 >>> x=list(range(200)) >>> x[::2]=[] 2.切片替换内容为数字 >>> x=list(range(200)) >>> x[1:]=2 |
3.列表的运算符号:+、*、in、not
>>> list=[1,2,3,4] >>> list*=2 >>> list [1, 2, 3, 4, 1, 2, 3, 4] >>> list+=[5,[6,7]] >>> list [1, 2, 3, 4, 1, 2, 3, 4, 5, [6, 7]] | >>> 1 in list True >>> [1,2] in list False >>> [6,7] in list True >>> [1,2] not in list True | 注意: 1.[1,2] in list如果为True表示列表还有一个[1,2]的子列表 2.not放在in前面 |
4.列表的方法 --使用方法来修改列表是不会产生新的列表的,使用函数必须赋值给其他列表
列表方法:四个删除两个添加,区分每个方法使用的参数是元素还行下标
方法 | 描述 (组合数据类型中,除了字符串,元组没有,灰底色) |
ls.append(x) | 在列表ls最后增加一个元素x |
ls.extend(list2) | 把两个列表相加;等于li+list2,只是运行速度快一些 |
ls.remove(x) | 将列表中出现的第一个元素x删除;不存在,则产生ValueError异常 |
ls.insert(i, x) | 在列表ls第i位置增加元素x,原本第i位的元素往后移 |
ls.pop(i) | 将列表ls中第i项元素取出并删除该元素 i如果超出范围会报错 |
ls.clear() | 删除ls中所有元素 |
del ls[begin,end,step] | 切片删除列表的元素 |
ls.reverse() | 列表ls中元素反转 |
ls.copy() | 生成一个新列表,复制ls中所有元素 |
list(x) | 将x(组合数据类型)转为列表类型。如果x为字典,则取键 |
总结列表使用extend,append,+三者使用的不同:
extend:列表末尾一次性追加另一个除数字以外的其他类型中的多个值,当追加的序列为字典和字符串时比较特殊,字典追加键,字符串拆开加入。
Append:一次只添加一个值,该值可以为任意其他数字类型
+:区别于extent和append:1.是需要把运算结果赋值给其他列表(也可以复值给列表本身)2.必须是两个列表相加
>>> list1=[1,2,3] >>> list2=[4,5] >>> list1.extend(list2) >>> list1 [1, 2, 3, 4, 5] >>> list1.extend((1,2,3)) [1, 2, 3, 4, 5, 1, 2, 3] >>> list1.extend({1,2,3}) >>> list1 [1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 3] >>> list1.extend({1:2,2:2,3:2}) >>> list1 [1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 3, 1, 2, 3] >>>list1.extend("abc") >>> list1 [1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 3, 1, 2, 3, 'a', 'b', 'c'] | >>> list1=[1,2,3] >>> list2=[4,5] >>> list1.append(list2) >>> list1 [1, 2, 3, [4, 5]] >>> list1.append((6,)) >>> list1 [1, 2, 3, [4, 5], (6,)] >>> list1.append({1:2,3:4}) >>> list1 [1, 2, 3, [4, 5], (6,), {1: 2, 3: 4}] ......还可以加入其他数据类型 | >>> list1=[1,2,3] >>> list2=[4,5] >>> list3=list1+list2 >>> list3 [1, 2, 3, 4, 5] >>> list1+=list2 >>> list1 [1, 2, 3, 4, 5] |
5.列表的内存地址:
内存地址: 通过id()函数查看内存地址
1.列表增删其中的元素,列表的内存地址不变;列表内相同元素的内存地址一样,反之,列表内不同元素的内存地址不一样
2.只要值相等,内存地址一样
3.把列表改为其他数值类型或者再次赋值,内存地址发生改变
因此,1.一个非空列表x执行x[0]=3后,列表x的内存地址不变
2.x=[1,2],y=2那么id(x[1])==id(y)为True
3.列表x=[1,2],执行x=2或x=[1,2]后,x的内存地址都会发生改变
6.特殊情况:
1.对于对象生成器x=(3 for i in range(5)),连续执行2次list(x).两次结果都不一样
>>> x=(3 for i in range(5))
>>> list(x)
[3, 3, 3, 3, 3]
>>> list(x)
[]
注:对象生成器x=(3 for i in range(5))得到的x是一个对象,而x=[i for i in range(5) if i%2==0]得到的x是一个列表[0, 2, 4]
7.列表运算速度比较
1.list1+list2 慢于list1.extend(list2) <-----函数的运算速度快于运算符的计算速度(所有通用,如:3.pow(2) 快于 2**2)
2.列表在中间添加元素 慢于 在末尾添加元素