列表

列表list

  • 一个排列整齐的队伍,Python采用顺序表实现
  • 列表内的个体称作元素,由若干元素组成列表
  • 元素可以是任意对象(数字、字符串、对象、列表等)
  • 列表内元素有顺序,可以使用索引
  • 线性的数据结构
  • 使用 [ ] 表示
  • 列表是可变的

初始化

  • list() -> new empty list
  • list(iterable) -> new list initialized from iterable's items
  • []
  • 列表不能一开始就定义大小

ls1 = []
ls2 = list()
ls3 = [2, 'ab', [3, 'abc'], (5, 30, 50)] # 列表是一个容器,元素可以是其它类型
ls4 = list(range(5)) # 非常常用的构造方式,将一个可迭代对象转换为一个列表

 

 

索引

  • 索引,也叫下标
  • 正索引:从左至右,从0开始,为列表中每一个元素编号
  •             如果列表有元素,索引范围[0,length-1]
  • 副索引:从右至左,从-1开始
  •             如果列表有元素,索引范围[-length,-1]
  • 正负索引不可以超界,否则引发异常 IndexError
  • 为了方便理解,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是下界,右边是上界
  • 列表通过索引访问,list[index],index就是索引,使用中括号访问
  • 首地址+index*字节数得到元素位置,一步到位,效率最高,时间复杂度为O(1)
  • 使用索引定位访问元素的时间复杂度为O(1),这是最快的方式,是列表最好的使用方式

查询

  • index(value,[start,[stop]])
  •         通过值value,从指定区间查找列表内的元素是否匹配
  •         匹配第一个就立即返回索引
  •         匹配不到,抛出异常ValueError
  • count(value)
  •         返回列表中匹配value的次数
  •         时间复杂度
  • Index和count方法都是O(n)
  •         随着列表数据规模增大而效率下降

 

 

修改


索引定位元素,然后修改。注意索引不能超界

 

 

增加单个元素

  • append(object) -> None
  •         列表尾部追加元素,返回None
  •         返回None就意味着没有新的列表产生,就地修改
  •         定位时间复杂度是O(1)
  • insert(index, object) -> None
  •         在指定的索引index处插入元素object
  •         返回None就意味着没有新的列表产生,就地修改
  •         定位时间复杂度是O(1)
  • 索引能超上下界吗?
  •         超越上界,尾部追加
  •         超越下界,头部追加

 

 

增加多个元素

  • extend(iteratable) -> None
  •           将可迭代对象的元素追加进来,返回None
  •           就地修改,本列表自身扩展
  • + -> list
  •           连接操作,将两个列表连接起来,产生新的列表,原列表不变
  •           本质上调用的是魔术方法__add__()方法
  • * -> list
  •           重复操作,将本列表元素重复n次,返回新的列表

 

 

 

 

Python中一切皆对象,而对象都是引用类型,可以理解为一个地址指针指向这个对象。
但是,字面常量字符串、数值等表现却不像引用类型,暂时可以称为简单类型。
而列表、元组、字典,包括以后学习的类和实例都可以认为是引用类型。
你可以认为简单类型直接存在列表中,而引入类型只是把引用地址存在了列表中

 

 

删除

  • remove(value) -> None
  •          从左至右查找第一个匹配value的值,找到就移除该元素,并返回None,否则ValueError
  •          就地修改
  •          效率?    效率较低
  • pop([index]) -> item
  •          不指定索引index,就从列表尾部弹出一个元素
  •           指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
  •           效率?指定索引的的时间复杂度?不指定索引呢?
  • clear() -> None
  •           清除列表所有元素,剩下一个空列表

 

 

 

反转
reverse() -> None
将列表元素反转,返回None
就地修改
这个方法最好不用,可以倒着读取,都不要反转。

 

 

排序
sort(key=None, reverse=False) -> None
对列表元素进行排序,就地修改,默认升序
reverse为True,反转,降序
key一个函数,指定key如何排序,lst.sort(key=function)
如果排序是必须的,那么排序。排序效率高吗?

 

 

 in成员操作 

 

 

 


posted @ 2022-07-21 17:29  45645+56  阅读(96)  评论(0)    收藏  举报