列表: 有序的可变的元素集合
定义:
-
方式1
[元素1, 元素2, 元素3...]
例如: [1, 2, 3, 4, 5]
-
方式2
- 列表生成式: 快速生成list
- 语法1:
range(stop), 取值范围[0, stop)
- 语法2:
range(start, stop, step)
- 语法1:
list = range(10) # 取值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
list = range(2, 10) # 取值: 2, 3, 4, 5, 6, 7, 8, 9
list = range(2, 10, 2) # 取值: 2, 4, 6, 8
注意: 为了防止生成的列表没有被使用, python3做了一些改变, 不会立即生成列表
* 列表推导式: 从一个list快速推导出另一个list
* 概念:映射解析--一对一变更, 过滤--从多到少
* 语法:[表达式 for 变量 in 列表]
、[表达式 for 变量 in 列表 if 条件]
```
# [表达式 for 变量 in 列表]
list = [num ** 2 for num in range(10)]
print(list)
# 打印: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]list = [fillcar for fillcar in "abcdefg"]
print(list)打印: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
[表达式 for 变量 in 列表 if 条件]
list = [num ** 2 for num in range(10) if num % 2 == 0]
print(list)打印: [0, 4, 16, 36, 64]
- 列表生成式: 快速生成list
列表的嵌套: 列表中的元素, 还可以是列表
列表中可以存放不同类型的数据
list = [1, "2", 3, 4.0, "5"]
print(list)
# 打印: [1, '2', 3, 4.0, '5']
常用操作
增、删、改、查、额外操作(判定、比较、排序、乱序、反转)
-
增: 在列表中添加新的元素
-
append(object)
: 在列表的最后添加一个新的元素- 没有返回值, 会改变原列表
list = [1, 2, 3, 4] list.append(5) print(list) # 打印: [1, 2, 3, 4, 5]
-
insert(index, object)
: 在列表中指定索引前插入一个元素- 没有返回值, 会改变原列表
- 可以往空数组中插入元素
# 插入到列表的指定位置 list = [1, 2, 3, 4] list.insert(0, 5) print(list) # 打印: [5, 1, 2, 3, 4]
# 空列表中插入元素 list = [] list.insert(0, 5) print(list) # 打印: [5]
# 插入到列表的最后位置 list = [1, 2, 3, 4] list.insert(4, 5) print(list)
-
extend(iterable)
: 往列表中, 扩展另一个可迭代序列- 没有返回值, 会改变原列表
# 扩展一个数组 list1 = [1, 2, 3] list2 = ["a", "b", "c"] list1.extend(list2) print(list1) # 打印: [1, 2, 3, 'a', 'b', 'c']
# 扩展一个字符串 list = [1, 2, 3] str = "abcdefg" list.extend(str) print(list) # 打印: [1, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f', 'g']
- 列表乘法
- 不会改变原列表, 只能是列表与整数相乘
list = [1, 2, 3] print(list * 3) # 打印: [1, 2, 3, 1, 2, 3, 1, 2, 3]
- 列表加法
- 将两个列表的元素放到一个新的列表中, 原列表不变
- 只能是两个列表相加
list1 = [1, 2, 3] list2 = ["a", "b", "c"] print(list1 + list2) # 打印: [1, 2, 3, 'a', 'b', 'c']
-
-
删: 移除列表中的某个元素
-
del语句
: 删除列表中的元素, 也可以删除变量
# 删除元素 num = [1, 2, 3, 4, 5] del num[1] print(num) # 打印: [1, 3, 4, 5]
# 删除元素 num = [1, 2, 3, 4, 5] del num print(num) # 报错: NameError: name 'num' is not defined
-
pop(index=-1)
: 删除指定索引的元素, 并将该元素做为返回值-
index
: 指定索引, 默认为-1 - 会将
index
指定的元素返回 - 下标不能越界, 否则报错
-
# 删除默认元素 list = [1, 2, 3, 4, 5] result = list.pop() print(result, list) # 打印: 5 [1, 2, 3, 4]
# 删除指定元素 list = [1, 2, 3, 4, 5] result = list.pop(1) print(result, list) # 打印: 2 [1, 3, 4, 5]
-
remove(object)
: 删除列表中指定元素- 如果列表中存在多个相同元素, 则只会删除最左边的一个
- 只能删除列表中有的元素, 否则报错
# 删除指定元素 list = [1, 2, 3, 4, 5] list.remove(2) print(list) # 打印: [1, 3, 4, 5]
# 当存在多个指定元素时, 只会删除最左边的一个 list = [1, 2, 3, 2, 4, 5, 2] list.remove(2) print(list) # 打印: [1, 3, 2, 4, 5, 2]
# 删除列表中不存在的元素, 会报错 list = [1, 2, 3, 4, 5] list.remove(6) print(list) # 报错: ValueError: list.remove(x): x not in list
-
-
改
-
列表[lindex] = 值
: 修改列表中指定索引的元素-
index
: 元素索引, 且不能越界 -
index
: 可以为负数, 即从后往前数
-
# 修改列表中指定索引的元素 list = [1, 2, 3, 4, 5] list[2] = 6 print(list) # 打印: [1, 2, 6, 4, 5]
# 索引越界会报错 list = [1, 2, 3, 4, 5] list[5] = 6 # 报错: IndexError: list assignment index out of range
# 索引为负数 list = [1, 2, 3, 4, 5] list[-2] = 6 print(list) # 打印: [1, 2, 3, 6, 5]
-
-
查
-
列表[index]
:获取单个元素-
index
: 元素索引, 可以为负数, 负数时从后向前 -
index
: 不可以越界
-
# 获取指定索引的元素 list = [2, 3, 4, 5, 6] print(list[2]) # 打印: 4
# 索引为负数的情况 list = [2, 3, 4, 5, 6] print(list[-2]) # 打印: 5
# 索引越界报错 list = [2, 3, 4, 5, 6] print(list[6]) # 报错: IndexError: list index out of range
-
index(object, start=0, end=len(list))
: 获取元素的索引, 范围[start, end)
-
object
: 需要查找索引的元素 -
start
: 查找的索引起点, 默认值为0
-
end
: 查找索引的终点, 默认值为len(list)
- 当列表中有多个相同的指定元素时, 会默认返回第一个该元素的下标
- 不能查找列表中没有的元素, 否则报错
-
# 查找指定索引 list = [2, 3, 4, 5, 6] index = list.index(5) print(index) # 打印: 3
# 查找不存在的元素, 报错 list = [2, 3, 4, 5, 6] index = list.index(7) print(index) # 报错: ValueError: 7 is not in list
-
count(object)
: 查找指定元素个数-
object
: 指定的元素
-
list = [2, 3, 4, 5, 6, 5] count = list.count(5) print(count) # 打印: 2
-
列表[start=0:end=len(list):step]
: 获取多个元素, 切片操作, 范围[start:end)
-
step
: 步长, 默认1
, 正数正取, 负数倒取 -
setp
: 正数时,start
对应元素必须在列表中位于end
对应元素的前方 -
setp
: 负数时,start
对应元素必须在列表中位于end
对应元素的后方 - 反转字符串:
列表[::-1]
-
# 正取 list = [2, 3, 4, 5, 6, 5] print(list[1:4]) # 打印: [3, 4, 5]
# 倒取 list = [2, 3, 4, 5, 6, 5] print(list[-1:1:-1]) # 打印: [5, 6, 5, 4]
# 反转 list = [2, 3, 4, 5, 6, 5] print(list[::-1]) # 打印: [5, 6, 5, 4, 3, 2]
-
-
遍历:
- 方式一: 根据元素进行遍历
list = ["a", "b", "c", "d", "e"] for object in list: print(object, end=" ") # 打印: a b c d e
- 方式二: 根据索引进行遍历
list = ["a", "b", "c", "d", "e"] for i in range(len(list)): print(list[i], end=" ") # 打印: a b c d e
- 方式三: 根据每句对象进行遍历
enumerate(sequence, [start=0])
-
sequence
: 一个序列, 迭代器, 或其他支持迭代器的对象
# 使用enumerate(sequence, [start=0])获取枚举对象 list = ["a", "b", "c"] print(enumerate(list)) # 打印: <enumerate object at 0x101cb4ea0>
# 遍历枚举对象, 打印出的是元组 list = ["a", "b", "c"] for e in enumerate(list): print(e, end = " ") # 打印: (0, 'a') (1, 'b') (2, 'c')
# 通过元素获取列表中元素的下标和元素本身 list = ["a", "b", "c"] for index, value in enumerate(list): print(index, value) # 打印: 0 a 1 b 2 c
-
判定:
-
元素 in 列表
: 判定列表中是否包含该元素
list = [1, 2, 3] print(1 in list) # 打印: True print(5 in list) # 打印: False
-
元素 not in 列表
: 判定列表中是否不包含该元素
list = [1, 2, 3] print(1 not in list) # 打印: False print(5 not in list) # 打印: True
-
-
比较
- Python2: 使用内置函数
cmp(列表1, 列表2)
: 从左到右, 逐个元素比较- 注意:
cmp
函数只有存在与Python2中 - 返回值: 如果
列表1
小于列表2
, 返回-1
, 等于返回0
, 大于返回1
- 注意:
list1 = [1, 2] list2 = [1, 2, 3] print(cmp(list1, list2)) # 打印: -1
- Python3: 使用比较运算符
== > <
, 从左到右, 逐个元素比较- 比较结果是布尔值
list1 = [1, 2] list2 = [1, 2, 3] print(list1 == list2) # 打印: False
- Python2: 使用内置函数
-
排序
- 方式一:
sorted(itrearble, key=None, reverse=False)
- 内置函数, 可以对任何可迭代对象进行排序
-
itrearble
: 可迭代对象 -
key
: 函数, 该函数只有一个返回值,sorted
函数会用这个值来排序 -
reverse
: 是否降序排列, 默认False
- 返回值: 排序好的新列表
- 原列表不变
# 排序数组 list = [1, 6, 2, 4, 3, 9, 5] result = sorted(list, reverse=True) print(result) # 打印: [9, 6, 5, 4, 3, 2, 1]
# 排序元组数组, 默认使用每个元组中的第一个元素进行比较 list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] resilt = sorted(list, reverse=True) print(result) # 打印: [(4, 'd'), (3, 'a'), (2, 'c'), (1, 'd')]
# 排序元组数组, 使用key指定排序的对象是哪一个 def getKey(x): return x[1] list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] resilt = sorted(list, key=getKey, reverse=False) print(resilt) # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
- 方式二:
sort(key=None, reverse=False)
- 功能与
sorted(itrearble, key=None, reverse=False)
相同 - 没有返回值
- 唯一不同:
sort
是对象方法, 改变列表本身,sorted
是内置函数, 不改变列表本身
- 功能与
# 排序元组数组, 使用key指定排序的对象是哪一个 def getKey(x): return x[1] list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] list.sort(key=getKey, reverse=False) print(list) # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
- 方式一:
-
乱序
- 使用
random
库中的函数shuffle(list)
, 对列表进行随机乱序操作random.shuffle(list)
- 没有返回值
- 改变原列表
import random list = [1, 2, 3, 4, 5] random.shuffle(list) print(list) # 打印: [3, 4, 2, 5, 1]
- 使用
-
反转
-
list.reverse()
: 反转列表元素- 没有返回值
- 改变原列表
list = [1, 2, 3, 4, 5] list.reverse() print(list) # 打印: [5, 4, 3, 2, 1]
-
list[::-1]
: 反转列表元素- 返回值: 反转后的新列表
- 原列表不变
list = [1, 2, 3, 4, 5] print(list[::-1]) # 打印: [5, 4, 3, 2, 1]
-