目录
- 一、一维列表的介绍和创建
- 二、序列的基本操作
-
- [1. 索引的查询与返回](#1. 索引的查询与返回)
- [2. 切片](#2. 切片)
- [3. 序列加](#3. 序列加)
- 三、元素的增删改
-
- [1. 添加元素](#1. 添加元素)
- [2. 删除元素](#2. 删除元素)
- [3. 更改元素](#3. 更改元素)
- 四、排序
- 五、列表生成式
一、一维列表的介绍和创建
列表(list
),也称数组 ,是一种有序、可变、允许重复元素的组合数据结构 ,属于可变序列 ,由方括号 []
内、用逗号分隔的一组元素组成。
列表可存储多个元素以方便对一组数据整体操作 。不同的列表的内存地址互不相同 ,即id
独立。
列表有两种创建方式:直接将目的列表赋予变量,称为赋值创建 ;使用list()
函数将任意组合转化为列表 ,称为引用创建。
下文的列表均指一维列表。
python
# 空列表
lst = []
lst = list()
# 赋值创建
lst = [1, 2, 3]
# 引用创建(字典转列表):转化前后元素不变
lst = list({'1': 'a', '2': 'b', '3': 'c', })
print(lst, type(lst), id(lst))
python
[1, 2, 3] <class 'list'> 1937556730752
列表的元素可以是任意数据类型的对象 的引用 ,也就是一维指针 。所以列表实际上是一种二维指针,用于存储一维指针。
在Python
中,通常不采用这种描述,因为Python
不支持指针的直接操作 。但是,列表的索引 可以模拟二级指针。
二、序列的基本操作
以下操作适用于所有序列,即列表、元组和字符串,下文仅以列表为例。
1. 索引的查询与返回
索引描述了序列中的元素的位置 ,是用于访问元素 的操作方法,分为正数索引 和负数索引。
序列中的元素从左到右的正数索引 依次为0, 1, 2, ... , n
,从右到左的负数索引 依次为-1, -2, ... , -n
。
可以通过查询索引获取对应元素的值。
python
lst = [1, 2, 3]
print(lst[0], lst[-3])
python
1 1
也可以使用index()
函数,通过元素的值返回对应的正数索引 。若列表存在相同的元素,只返回最小的正数索引 ;若列表不存在对应的元素,报错ValueError
.
index(arg1, arg2=0, arg3=len(list))
可限定索引区间 :默认 步长为1
,开始索引为0
,结束索引为列表长度(元素个数) ,区间形式与range
函数相似,即左闭右开。
若arg3
未传递,传递了负数,或者传递了小于arg2
的值,则参数 arg3
无效 ,函数功能为:返回索引为 arg2
上的指定元素的正数索引 。一般不会用到该功能。特别的,若arg2=arg3
,一定会报错,因为索引区间为空。
python
lst = ['1', '2', '3', '4', '1']
# index(element):返回指定元素的索引
print(lst.index('1'))
# index(element, index):返回限定位置上的指定元素的索引
print(lst.index('1', 4))
# index(element, start, stop):返回限定位置区间上的指定元素的索引
print(lst.index('1', 1, 5))
python
0
4
4
2. 切片
切片是指获取序列中的子序列 ,是访问序列中的多个元素 的一种方式,其结果是原序列片段的拷贝。
list[start=0:stop=-1:step=1]
,就是将整数序列range(start,stop,step)
作为从原序列所取元素的索引 ,获取并拷贝这些元素,然后返回一个具有新id
的子序列。
其参数默认值与range
类似。特别的,若start
或stop
为负数索引 ,则先转化为正数索引 ,再遵循range
对应。
python
lst = [1, 2, 3, 4, 5, 6]
print(lst[1:5:2], lst[1:-1:2])
print(id(lst), id(lst[1:5:2]))
# 第一个冒号不能省略,第二个可以省略
print(lst[1:5], lst[1::2], lst[:5:2])
print(lst[1:], lst[:5], lst[::2])
python
[2, 4] [2, 4]
1383891593536 1383891563392
[2, 3, 4, 5] [2, 4, 6] [1, 3, 5]
[2, 3, 4, 5, 6] [1, 2, 3, 4, 5] [1, 3, 5]
3. 序列加
同类型的序列 之间可以进行序列加 运算+
,即:将后一个 序列的元素依次添加 到前一个序列里。
python
lst = list([1, 2])
print(lst + lst)
python
[1, 2, 1, 2]
三、元素的增删改
1. 添加元素
append(element)
函数:在列表末尾 添加一个元素。extend(iterable)
函数:在列表末尾 依次添加一个组合内的元素。insert(index, element)
函数:在指定索引 插入一个元素 ,后续元素索引+1
.
上述的函数没有返回值,也就是说它们的操作是在原列表上进行的,但列表的id
仍会改变。
序列加赋值 运算+=
可以替代extend()
函数,但列表没有被分配-=
运算。
python
lst = list([1, 2])
# 不能将组合内的元素加入列表
lst.append([3])
print(lst)
# 集合是无序组合,添加次序遵循特殊的哈希映射
lst.extend({5, 4})
print(lst)
# 也可以简化为赋值运算
lst += (7, 8) # 元组,一种序列,属于组合类型
print(lst)
# 负数索引视为正数索引输入
lst.insert(-7, '0')
print(lst)
python
[1, 2, [3]]
[1, 2, [3], 4, 5]
[1, 2, [3], 4, 5, 7, 8]
['0', 1, 2, [3], 4, 5, 7, 8]
2. 删除元素
remove(element)
函数:删除一个 指定元素,若存在重复元素,取最小正数索引。pop(index=-1)
函数:删除一个指定索引 上的元素,参数默认值为-1
.clear()
函数:清空 列表中的所有元素。del
语句:删除一个指定索引 上的元素,也可以删除指定切片范围 内的元素,甚至删除列表本身。
python
lst = list([1, 2, 3, 4, 5])
lst.remove(5)
print(lst)
lst.pop(0)
print(lst)
lst.pop()
print(lst)
lst.clear()
print(lst)
lst = list([1, 2, 3, 4, 5])
del lst[0]
print(lst)
del lst[1:]
print(lst)
del lst
print(lst)
python
[1, 2, 3, 4]
[2, 3, 4]
[2, 3]
[]
[2, 3, 4, 5]
[2]
NameError: name 'lst' is not defined.
3. 更改元素
列表元素的更改主要通过索引查询 和切片替换,它们的功能与上述的添加和删除有所重叠。
索引查询 不仅能获取指定索引上的元素的值,也可以对它进行修改;切片替换 可将切片内的元素依次替换为一个组合内的元素 。当切片步长为1
时,组合的元素数量不受限制 ;否则,切片的元素个数须等于组合的元素个数。
python
lst = list([1, 2, 3, 4, 5])
# 逐个修改
lst[0] = 0
print(lst)
# 批量修改
lst[1:3] = [10, 20, 30, 40]
print(lst)
# 批量删除
lst[1:5] = []
print(lst)
# 跳跃替换
lst[::2] = 'ab'
print(lst)
python
[0, 2, 3, 4, 5]
[0, 10, 20, 30, 40, 4, 5]
[0, 4, 5]
['a', 4, 'b']
四、排序
sort(reverse=False)
是一个无返回值 函数,参数默认值为升序排列 ,可以对列表 内的元素进行排序。对于基本数据类型的元素,数值类型可以互相排序,字符串不能与数值排序 。
sorted(reverse=False)
与前者的区别在于,它可以对任意组合 内的元素进行排序,并返回 一个排序后的列表。
对于值的大小相同,但类型不同的数值 ,遵循int < float < bool
。
字符串的比较将在后续篇章说明,排序算法则在进阶篇中展开。
python。
lst = [0, 1, 1.0, True, 2]
# 升序排列
lst.sort()
print(lst)
# 降序排列
print(sorted(lst, reverse=True))
python
[0, 1, 1.0, True, 2]
[2, 1, 1.0, True, 0]
五、列表生成式
生成式是for
遍历的缩简语句 ,用于快速生成组合 ,格式为:[运算式 for
变量 in
可迭代对象],即:遍历可迭代对象,将其每个元素经运算后的结果加入所生成的组合中。
python
print([i**2 for i in range(5)])
python
[0, 1, 4, 9, 16]