python内置数据类型列表_python内置数据类型之列表

lst[#] 通过下标访问,从0开始。

ps:如果#超过下标的范围时候会出现IndexError的错误。

如果#为负号,则索引从右边开始,#无论为正负均有范围,超过范围会报错。

lst = list(range(0,9)) #生产列表

l1 = lst[3] #通过正索引访问元素

l2 = lst[-1] #通过负索引访问元素

print(l1)

print(l2)

#说明,如果正负索引超界,则会报错。

#错误代码:IndexError: list index out of range

2 .列表元素查找

查找元素:L.index( value,[start[stop]])方法:返回查找到的第一个value值的索引。

start表示从第几个索引开始,stop表示到哪个索引结束,均可省略。

b.但是如果出现stop,其前必须有start值,索引时包含start位置不包含stop位置。

c.如果匹配不到元素,则返回:ValueError: xx is not in list

d.index查找元素的时间复杂的为O(n)

lst = list(range(11,19))

print(lst)

[11, 12, 13, 14, 15, 16, 17, 18]

lst.index(13) #13的索引值为2

统计元素:L.count(value) 统计列表中出现多少个value值。

len(L),求list列表的长度。

count方法的时间复杂的为O(n)

3 .列表元素操作

a.修改元素

直接赋值,L[#]=value。

#为列表的索引值

索引不能越界,会报错IndexError: list assignment index out of range

修改列表自身

lst = list(range(1,10))

lst[2]=111

lst[4]=123

lst

[1, 2, 111, 4, 123, 6, 7, 8, 9]

b.增加元素

L.append(#),修改L本身,并且追加在列表末尾。

L.extend([#1,#2,#3]) , 将可迭代对象扩展到列表末尾。

L+[‘a’,’b’,’c’] ,不修改列表本身,返回一个新的列表。

c.插入元素

L.insert(idx,#),将在该idx前插入#,会修改L本身。

当idx为正数,且大于列表本身的索引数,

会实现append方法将插入在元素最末尾;当idx为负数,且小于-len(L)+1时将会插入到列表最前。

append的时间复杂度是O(1),效率和数据的规模无关。

insert的时间复杂度是O(n),效率个数据规模正相关。

d.移除元素

L.remove(value),修改自身,从左到右删除第一个匹配到的值。

L.pop(idx),返回并删除索引指向的值。如果不指定idx,将删除列表最后的元素。

pop不指定值时,时间复杂度是O(1)的;

pop指定idx时,时间复杂度是O(n)的。

L.clear(),删除索引元素。慎用,会引起垃圾回收。

e.列表反转

reverse(),修改自身,反转列表元素。

f.列表排序

L.sort(),排序操作,修改自身,升序排列。 L.sort(reverse=True),逆序排列。

4 .列表进阶

1. 列表复制

copy()方法,列表浅拷贝。遇到引用类型,仅仅复制引用地址。当原来引用类型的值发生变化时,拷贝后的列表的值也随之发生变化。

lst = list(range(4))

lst1 = lst.copy()

print(lst1)

#浅拷贝特性说明

lst = [1,[2,3,4],5]

lst1 = lst.copy()

lst1[1][2] = 11

lst[1][0]=22

print(lst)

print(lst1)

#lst = lst1,引用内的值改变,列表均发生变化。

[0, 1, 2, 3]

[1, [22, 3, 11], 5]

[1, [22, 3, 11], 5]

copy模块下的deepcopy() 提供了深拷贝方法。

import copy

lst = [1,[2,3,4],5]

lst1 = copy.deepcopy(lst)

lst1[1][2] = 11

print(lst)

print(lst1)

#lst != lst1 对比lst.copy方法。

[1, [2, 3, 4], 5]

[1, [2, 3, 11], 5]

2. 打乱列表

需要引入random模块

# random.shuffle(list)

lst = [1,323,4,-3,[1,3],None,(1,34),{1:3}]

random.shuffle(lst) #修改自身,返回值为None,不能使用其他空间接受。

lst #通过shuffle打乱后列表的顺序发生变化。

[323, {1: 3}, None, [1, 3], 1, -3, 4, (1, 34)]

random模块的其他对象:

import random

print(random.randint(1,11)) #返回[1,11] 之间的整数,注意左右闭区间

print(random.choice(range(11))) #从非空序列中随机挑选一个整数

#randrange ([start,] stop [,step]) 从指定的范围内,按指定基数递增的集合中获取一个随机数

random.randrange(1,7,2) #从[1,7)中,步长为2的数字中获取一个数

注意:本文来自遗失的章节。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!

CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值