本节内容:

  • 列表
  • 元组
  • 字符串
  • 集合
  • 字典

本节先介绍列表。

一、列表

一种容器类型。列表可以包含任何种类的对象,比如说数字、子串、嵌套其他列表、嵌套元组。
任意对象的有序集合,通过索引访问其中的元素。其长度可变,支持异构(在一个列表中可以包含多种不同类型的元素),可以任意嵌套。
列表是可变对象,支持在原处修改。列表的可变变现在其内部的每一个元素存储在列表中不是对象本身,而是对象的引用。因此其修改的是对象的引用。

help()是ipython里特有的函数,可以打印出类、函数的一些信息。

In [1]: help(list)Help on class list in module builtins:class list(object)|  list() -> new empty list|  list(iterable) -> new list initialized from iterable's items|  |  Methods defined here:|  |  __add__(self, value, /)|      Return self+value.|  |  __contains__(self, key, /)|      Return key in self.|  |  __delitem__(self, key, /)|      Delete self[key].|  |  __eq__(self, value, /)|      Return self==value.|  |  __ge__(self, value, /)|      Return self>=value.|  |  __getattribute__(self, name, /)|      Return getattr(self, name).|  |  __getitem__(...)|      x.__getitem__(y) <==> x[y]|  |  __gt__(self, value, /)|      Return self>value.|  |  __iadd__(self, value, /)|      Implement self+=value.|
...

  

1. 初始化列表

list(),里面可以什么都不放,也可以放可迭代对象。
直接一个[]
In [2]: lst = list()In [3]: lst = []In [4]: lst
Out[4]: []In [5]: lst = [1, 2, 3]In [6]: lst
Out[6]: [1, 2, 3]

  

2. 下标/索引操作

python中list的索引从0开始。绝大多数语言的下标是从0开始的,也有少部分例外,比如awk、lua。
负数的索引表示从后往前数,由-1开始,-1表示最后一个元素。
In [6]: lst
Out[6]: [1, 2, 3]In [7]: lst[0]
Out[7]: 1In [8]: lst[-1]
Out[8]: 3

如果索引超出范围,将引发IndexError。
In [9]: lst[-4]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-9-7ea420056b9a> in <module>()
----> 1 lst[-4]IndexError: list index out of rangeIn [10]: lst[3]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-298ffefac8cf> in <module>()
----> 1 lst[3]IndexError: list index out of range

修改元素的时候,如果超出索引范围,也会引发IndexError。

  

3. 列表的操作

  • 增:append、extend、insert
  • 删:clear、pop、remove
  • 改:reverse、sort
  • 查:count、index
  • 其他:copy
(1)给list增加元素

append:

append方法原地修改list,给list最后增加一个元素。append方法的返回值是None。

insert:

insert方法操作的索引超出范围时,如果是正索引,等效于append,如果是负索引,等效于insert(0, object)
insert的时间复杂度是O(n),append的时间复杂度是O(1)。因为insert是要做一个遍历的。

extend:

extend的时间复杂度是O(n),这个n是可迭代对象的长度,并不是原有list的长度n。

(2)删除元素

pop:

可以传入index,默认从最后移除一个元素,并且把这个元素返回回来。

index默认是-1,即最后一个元素,如果index超出索引范围,会抛出IndexError。

remove:

pop是弹出索引对应的值,remove是删除最左边的一个值。
pop针对的是索引,remove针对的是值。

remove的时候,如果值不存在,会抛出ValueError。

pop和remove的时间复杂度都是O(n)

clear:

clear方法删除列表的所有元素。
(4)查找/统计元素
可以利用index查询

index:

start包含,stop不包含。即[start, stop)
index方法根据值查找索引。
count:

count返回指定的value在List中出现的次数。

len函数

不是List的方法,它是python的一个内置函数,用于检查List元素个数。并不仅仅是针对List,可以针对很多对象。

(5)修改列表

sort:

原处是指直接修改List

reverse:

原处是指直接修改List

(6)其他方法

copy:

如何删除后面的2?

如果不想在原List上做修改:

lst2 = lst,只是一个指针指到lst指到的那块内存,因此操作lst2的时候,lst也被修改了。因为它们两个都是指针,指到同一块内存。这就用到List的copy函数了。

搞错了,不是深copy,只是一层copy。

id()打印出引用指向的内存块的地址。
成员关系判断
  • in
  • not in

【举例】:如何去除List中的重复元素

列表相加:合并两个列表,生成了一个新列表。不会修改原列表。这个和子串的相加是一样的,生成新的子串。

序列相乘:就是重复元素多次。都是生成新对象。
子串乘法:

列表乘法:

4. 切片

切片通常是用来访问数据的,如果你对切片赋值的话,产生的结果是不可预料的。切片操作总是返回一个新的list,不会改变原有的list

seq[start, end]     [start, end)

  

如果想获取到最后一个元素,省略end

以上都是从左往右切片,所以左边的数字要小于右边的数字。

start超出索引范围从0开始,end超出索引范围到到len(lst)结束。

start为0时可以省略,end省略表示打印到最后一个元素,start和end都省略就是copy。

切片还有一个第3个参数:step,默认是1

当step为负数的时候,从后往前数,此时start应该大于end,否则返回空列表。

切片赋值

对切片赋值,会替换切片原来的元素。

通常我们是不会对切片进行赋值的,会造成很多的误解。

5. 解包/封包

看一个例子,传统的swap

但是在python里面不需要这么做

原来中间的3行代码变成了现在的1行代码,这就是解包/封包。
最简单的解包就是如下:把右边的元组或者列表(可迭代对象都行)解开成了左边的两个变量,这种就是解包。

封包就是把一组变量,变成元组。把若干变量或常量封装到一个变量里,这就是封包。

我们显式的使用封包比较少,但是解包用的很多。
应用场景:

解包是把集合里的元素赋值给变量(集合可以是可迭代对象),赋值完的变量要么是一个值,要么是个list,而不管右侧集合是列表还是元组。
封包是把变量构建成元组。下面的这种用法python2是不支持的。

比如我想取出list中的下标是0,1,3元素,切片是不好做的:

下划线_ 是指当我们要丢弃一个变量时使用的。
再如,我们取一头一尾:

再看两个复杂点的:

只要两边结构是一样的,解包多少层都是可以的。

转载于:https://www.cnblogs.com/zhaojiankai/p/8954539.html

Python内置数据结构--列表相关推荐

  1. python内置数据结构教程_python课程第二周 内置数据结构——列表和元组

    5种内置数据结构:列表.元组.字典.集合.字符串.列表.字典.字符串三种被称为线性结构.针对线性结构的操作有:切片.封包和解包.成员运算符.迭代. 针对数据结构的操作有解析式:解析式分为列表解析.生成 ...

  2. python数据结构的列表_Python内置数据结构——列表list

    内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型int ...

  3. python内置数据结构_Python基础知识2-内置数据结构(下)

    bytes.bytearray #思考下面例子: a = 1b=aprint(a == b)#True print(a is b)#True print(id(a) is id(b))#False p ...

  4. Python内置数据结构及其复杂度

    为了使用python实现复杂数据结构与算法,需要借助python内置的基础和数据结构,主要是list和dict,明白这两种数据结构各操作的复杂度对于问题求解以及计算复杂度有着至关重要的作用. 一.li ...

  5. python内置数据结构教程第四版答案_Python数据结构--内置数据结构

    本文提到的所有内容均是基于Python 2.7,在Python 3.x的环境下可能并不完全适用 什么是数据结构 我们可以看一下在百度百科对于数据结构是怎么定义的: 数据结构是指相互之间存在着一种或多种 ...

  6. 【Python】07、python内置数据结构之字符串

    一.字符串 1.定义和初始化 In [4]: s = "hello python" In [4]: s = "hello python"In [5]: s Ou ...

  7. python内置数据结构之dict

    字典是什么 key-value对的集合.可变的.无序.key不重复的序列.key只能是唯一标识,value不限定,只要是合法的value.key和value一一对应. 字典的定义初始化 空字典定义 d ...

  8. Python培训教程:Python内置数据结构之双向队列

    经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...

  9. Python内置数据结构之双向队列

    经常听说Python就是一门执行速度低的语言,可能是你的程序中使用了复杂的算法与数据结构,才会导致程序执行速率低的.在Python的标准库中提供了常见的数据结构工开发者使用,不仅执行速率比较快,还可以 ...

最新文章

  1. 论坛报名 | 从捉迷藏、星际争霸到新一代人工智能:多智能体深度强化学习的理论与实践...
  2. ThinkPHP 3.2 vendor()方法的深入研究及Phpqrcode的正确扩展
  3. 北理工副教授曝学生论文被100%抄袭,对方为南方某985学生,该校抄袭事件还不止一起...
  4. Java实现简单的队和栈
  5. log4j2动态修改日志级别及拓展性使用
  6. 2019-03-11-算法-进化(搜索二维矩阵II)
  7. css-div定位详解
  8. 巧用 Nginx 快速实现 HTTPS 双向认证
  9. linux函数删除某文件,Linux环境下用C++删除指定文件
  10. 《TCPIP详解》卷一系列解读
  11. 大功率MOS管选型手册及可申请样品-KIA MOS管
  12. pe_xscan作了3点更新 1
  13. 用html实现学生考勤系统,学生考勤管理信息系统的设计与实现最终版(样例3)...
  14. mysql的explain执行计划_MySQL之Explain(执行计划)
  15. leetcode做题过程中遇到的神bug
  16. 固态硬盘分为哪几种_固态硬盘有哪些接口 固态硬盘接口介绍【详解】
  17. unity4.0多平台发布强势登陆引领3D游戏开发新时代
  18. Python认证现已生效,并且其他freeCodeCamp 7.0版课程更新
  19. Android图像处理之Paint
  20. Unity 获取设备国家地区(Android)

热门文章

  1. 详解XStream别名
  2. Objective-c 类的继承 方法重写 方法重载
  3. Android JNI入门第一篇——HelloJni
  4. W5100使用中的常见问题
  5. DHTML【5】--HTML
  6. GridView导出到Excel和开源图表工具
  7. 多点子接口的帧中继配置(MP SubInterface FrameRealy)
  8. 如何零基础或者转行数据分析师?
  9. a good approach to make demonstrations at the baidu netdisk
  10. 照片处理和分享的思路