本节内容:

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

本节先介绍列表。

一、列表

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

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]: 1 In [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 range In [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元素,切片是不好做的:

下划线_ 是指当我们要丢弃一个变量时使用的。

再如,我们取一头一尾:

再看两个复杂点的:

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

Python内置数据结构--列表的更多相关文章

  1. Python内置数据结构之列表list

    1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...

  2. Python内置数据结构之字符串str

    1. 数据结构回顾 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于字符串,但是字符串是不可变序列,因此所有的元素赋值和切片赋值都是非法的. >>> ...

  3. Python内置数据结构之元组tuple

    1. Python序列之元组:不可修改的序列 元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能像列表式的增删改,只能查,切片,所以元组又叫只读列表. 元组用圆括号括起(这是通常采用的做法) ...

  4. Python内置数据结构之字典dict

    1. 字典 字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下.键可能是数(整数索引).字符串或元组.字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单 ...

  5. python内置数据结构方法的时间复杂度

    转载自:http://www.orangecube.net/python-time-complexity 本文翻译自Python Wiki 本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了P ...

  6. python 内置数据结构 切片

    切片 通过索引区间访问线性结构的一段数据 sequence[start:stop] 表示返回[start,stop]区间的子序列 支持负索引 start为0,可以省略 stop为末尾,可以省略 超过上 ...

  7. python 内置数据结构 字符串

    字符串 一个个字符组成的有序的序列,是字符的集合 使用单引号,双引号,三引号引住的字符序列 字符串是不可变对象 Python3起,字符串就是Unicode类型 字符串定义 初始化 s1 = 'stri ...

  8. python内置数据结构

    数据类型: 数值型 int float complex bool 序列对象 字符串 str 列表 list 元组 tuple 键值对 集合 set 字典dict 数值型: int.float.comp ...

  9. Python的内置数据结构

    Python内置数据结构一共有6类: 数字 字符串 列表 元组 字典 文件 一.数字 数字类型就没什么好说的了,大家自行理解 二.字符串 1.字符串的特性(重要): 序列化特性:字符串具有一个很重要的 ...

随机推荐

  1. Python杀死windows进程

    import os import pandas as pd """ TCP 192.168.1.155:63758 129.211.126.69:4730 ESTABLI ...

  2. A - Longest k-Good Segment (尺取法)

    题目链接: https://cn.vjudge.net/contest/249801#problem/A 解题思路:尺取法,每次让尺子中包含k种不同的数,然后求最大. 代码: #include< ...

  3. 关于django1.7.7使用ajax后出现“CSRF token missing or incorrect”问题的解决办法

    最近使用Python3.3.25和django1.7.7开发公司项目,在使用ajax来post数据时,居然一直提示:403错误,原因是“CSRF token missing or incorrect” ...

  4. java生成TXT

    1.由于公司需要生成如下格式TXT: var ovr_parameters={ "changeMainVideoList": [ ], "indexList": ...

  5. 基于Python的机器学习实战:KNN

    1.KNN原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应 ...

  6. Docker安装ActiveMQ

    ⒈下载 docker pull webcenter/activemq ⒉运行 docker run -d --name myactivemq -p 8161:8161 -p 61613:61613 - ...

  7. 五、regularized线性回归练习(转载)

    转载链接:http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964515.html 前言: 本节主要是练习regularization项的使 ...

  8. 安装VNC

    一.安装相应桌面环境与vnc服务端和客户端: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME桌面环 ...

  9. UML和模式应用3:迭代和进化式分析和设计案例研究

    1.前言 如何进行迭代和进化式分析和设计?将采用案例研究的方式贯穿始终.案例研究所包含的内容: UI元素 核心应用逻辑层 数据库访问 与外部软硬构件的协作 本章关于OOA/D主要介绍核心应用逻辑层 2 ...

  10. python实战===教你用微信每天给女朋友说晚安

    但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送”晚安“,故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起来更方便. 准备: ...