前言
笔者刚开始学习Python。本文主要记录学习,如有错漏和不足之处,请大家指正❀。本篇主要讲述序列中的列表,同时简单介绍元祖。
一、序列是什么?
序列是一种数据存储方式,用来存储一系类的数据。
序列结构:字符串、列表、元祖、字典、集合。
二、列表的概念
列表:任意对象(任意元素、任意类型)的序列,如[10,20,30]
列表对象常用方法的要点:增加元素、删除元素、访问元素、计数、列表长度、翻转列表、排序、浅拷贝等。
需要注意的还是,列表的大小可变,根据需要可以随时增加或缩小。
三、列表的创建
1.基本语法[]创建
a = [“linshen”,20,30]
a = [] #创建一个空的列表对象
2.list()创建
a = list()#创建一个空的列表对象
list()可以用来将任何可迭代的数据转化成列表,以a = list(“linshen”)
为例,可以得到
In [1]: a = list("linshen")
In [2]: a
Out[2]: ['l', 'i', 'n', 's', 'h', 'e', 'n']
3.range()创建
标准格式为:
range([start,]end[,step])
其中,end必选,start可选,默认为0,step可选,默认为1。整数序列可以用range()和list()变成列表
4.推导式创建
推导式创建可以通过循环创建多个元素,如下所示:
In [13]: d =[x*2 for x in range(10)]
In [14]: d
Out[14]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
有时候,也可以通过if过滤元素。
四、列表元素的增加或删除
对内存进行修改,出于列表操作效率的考虑,一般只在列表尾部添加元素或删除元素。在这里介绍几种增加或删除列表元素的方法。
1.通过Append()方法增加列表元素
在尾部添加新的元素,速度最快
a = [5,2]
a.append(0)
得到a = [5,2,0]
2.通过+运算符增加列表元素
创建新的列表对象
a = [5,2]
a = a+[0]
得到a = [5,2,0]
3.通过extend()方法增加列表元素
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。此时,列表对象的id没有变化。
In [1]: a = [5,2]
In [2]: id(a)
Out[2]: 2556694327880
In [3]: a.extend([0])
In [4]: a
Out[4]: [5, 2, 0]
In [5]: id(a)
Out[5]: 2556694327880
4.通过Insert()方法增加列表元素
用于将指定元素插入到列表对象的指定位置。
(当要处理的元素较多时,尽量避免使用)
a = [5,2,0]
a.insert(2,100)#在第二个位置插入数值100
得到a=[5,2,100,0]
5.乘法拓展增加列表元素
列表的乘法拓展和字符串的乘法原理相同。生成一个新列表,进而实现原列表元素的多次重复。
6.利用del删除列表元素
a = [5,2,0]
del a[2]
得到a=[5,2]
7.利用pop()方法删除列表元素
pop()可以删除并返回指定位置元素。
如果此时未指定位置,则默认操作列表最后一个元素。
a = [10.20,30,40,50]
b=a.pop()
得到b=50
,a=[10,20,30,40]
8.利用remove()方法删除列表元素
可以利用remove()删除首次出现的指定元素。
当不存在该元素时,则会显示异常。
五、列表元素的访问和计数
这一部分的内容比较简单,具体而言,可以有下述方法:
1. 通过索引直接访问元素,索引的区间在[0,列表长度-1]
2. Index()获得指定元素在列表中首次出现的索引,语法是index(value,[start,[end]])。其中,start和end确定了搜索的范围。
3. count()获得指定元素在列表中出现的次数
4. len()返回列表的长度#即包含元素的个数
5. 成员资格判断,用in操作符可以简洁判断,偶尔也可以使用count()
六、列表的切片操作
(* ̄︶ ̄)切片slice操作可以快速提取子列表或修改。
其标准格式为:
[起始偏移量start:种植偏移量end[:步长step]]。
注意:当步长省略时可以省略第二个冒号,列表的切片操作和字符串的切片基本一致。
为方便计算,选择如下实例计算:
>>> a =[10,20,30,40,50,60,70]
>>> a[1:3:1]
[20, 30]
七、列表的排序
在此,主要介绍列表排序的4种方法:
1.修改原列表
内容 | 排列 |
---|---|
a.sort() | 默认是升序排列 |
a.sort(reverse=True) | 降序排列 |
random.shuffle(a) | 打乱顺序 |
2.建立新列表
可以通过内置函数sorted()进行排序,这一方法并不修改原列表
>>> c = [5,2,0]
>>> id(c)
1758750284808
>>> c = sorted(c)#默认升序排列,如需降序排列可以参考上述reverse=True
>>> c
[0, 2, 5]
3.通过reversed()返回逆序排列
可以通过切片操作返回逆序,具体如下:
>>> q = reversed(c)
>>> q
<list_reverseiterator object at 0x000001997DAFEC08>
>>> list(q)
[5, 2, 0]
>>> list(q)
[]#迭代器只能迭代一次
4.其他方法
除了上述方法,涉及列表排序还有Max()、Min()、Sum()等等,在这里就不加以赘述用法了。
八、多维列表
类型 | 数据 |
---|---|
一维列表 | 线性数据 [1,2,3,4,5] |
二维列表 | 二维、表格的数据 |
为了方便理解,我们可以将多维列表视作列表套列表。对于二维数组,可以通过a[]
或a[][]
索引。
拓展学习——元祖
元祖属于不可变序列,元祖的访问和处理速度比列表快。元祖可以作为字典的键,列表不能作为字典的键使用。
1.元祖的创建与删除
- 通过()创建元祖。
小括号可以省略;当只有一个数时应加“,”,不然其type会被认定为数值(整型或浮点数型)。 - 通过tuple()创建元祖。
其中,可以利用tuple()将字符串、列表、其他序列类型、迭代器等生成元祖,和list()异曲同工。 - 生成器推导式创建元祖。
和列表推导式相似,生成器推导式生成的不是列表也不是元祖,而是一个生成器对象。下面是生成器推导式创建元祖的一个实例:
>>> s = (x*3 for x in range(9))
>>> s
<generator object <genexpr> at 0x000001997DA79CC8>
>>> tuple(s)
(0, 3, 6, 9, 12, 15, 18, 21, 24)
>>> tuple(s)
()
- del可以删除元祖(方法与列表相似)。
2.元祖的访问、计数和排序
元祖的访问、计数和排序方法与列表基本相同。
需要注意的是,列表排序中list.sorted()
可以修改原列表对象,而元祖不行。元祖只能使用sorted(tupleOjb)
,在此情况下会生成新的列表对象,而非元祖。