python-列表总结

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.列表在中间添加元素 慢于 在末尾添加元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值