列表是python中最常用的数据类型,其数据项不需要具有相同的类型
列表创建方式1:[]创建
a = [] # 创建一个空列表
print(a)
b = [1, 2, 'abd'] # 创建列表并赋值
print(b)
print(b[2]) # 下标访问
列表的创建方式2:list()创建
a = list() # 创建一个空列表
print(a)
a.append(1) # 添加元素
print(a)
b = list("abcdef")
print(b) # 输出 ['a', 'b', 'c', 'd', 'e', 'f']
列表的创建方式3:range辅助创建整数列表
c = list(range(10))
print(c) # 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
d = list(range(0,10,2))
print(d) # 输出 [0, 2, 4, 6, 8]
e = list(range(10,0,-1))
print(e) # 输出 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
列表创建方式4:推导式生成列表
f = [x*2 for x in range(10)]
print(f) # 输出 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
g = [x*2 for x in range(50) if x%8==0]
print(g) # 输出 [0, 16, 32, 48, 64, 80, 96]
二维列表创建方式1:创建空二维列表
# 方式1: 创建空二维列表
a = [[] for i in range(5)]
print(a) # 输出: [[], [], [], [], []]
b = []
for i in range(5):
b.append([])
print(b)
二维列表创建方式2:直接定义二维列表
list_name = [[元素11, 元素12, 元素13, 元素14],
[元素21, 元素22, 元素23, 元素24],
[元素31, 元素32, 元素33, 元素34]]
print(list_name) # 输出 一个 3 x 4 的列表
二维列表创建方式3:使用嵌套for循环创建二维列表
# 创建一个 3 x 4 的列表
lis = []
for i in range(3):
lis.append([])
for j in range(4):
lis[i].append(j)
print(lis)
二维列表创建方式4:使用推导式生成二维列表
list_name = [[i for i in range(4)] for j in range(3)]
print(list_name) # 3 x 4 列表
一维列表的访问
''' 取元素 '''
list_name[0] # 取第一个元素
list_name[-1] # 取最后一个元素
list_name[:] # 取所有元素
list_name[m : n] # 取[m, n)元素
list_name[m :] # 取m开始到结尾的所有元素
''' 遍历 '''
for item in list_name:
print(item)
length = len(list_name)
index = 0
while index < length:
print(list_name[index])
index += 1
二维列表的访问: 注意没法用array数组的方式来读取每一列
''' 取元素 '''
list_name[row_index][col_index] # 行索引,列索引
''' 按行读取 '''
for row_item in list_name:
print(row_item) # 逐行遍历
''' 按列读取 '''
for col_index in range(4):
columns = [item[col_index] for item in list_name]
print(columns) # 输出每一列
# 用array的方式读取每一列失败
print(list_name[:, 0]) # 意图输出所有行第一列失败
''' 遍历 '''
for row_index in len(list_name):
for col_index in len(list_name[0]):
print(list_name[row_index][col_index])
for row_item in list_name:
for item in row_item:
print(item) # 逐行逐列输出
直接修改元素值
1_d_list[0] = 'new_element'
2_d_list[0][1] = 'new_element'
使用append新增元素
1_d_list.append(new_element)
2_d_list.append([new_list])
在某处插入元素
1_d_list.insert(0, 'new') # insert(index,obj)将元素插入到列表的index位置处
# 举例
list_name = ['D', 1, 2, 3, 4]
list_name.insert(1, 'E')
print(list_name) # 输出 ['D', 'E', 1, 2, 3, 4]
在列表末尾添加多个值:注意添加的序列必须是可迭代对象
list_1 = [1, 2, 3]
list_2 = [4, 5, 6]
list_1.extend(list_2)
print(list_1) # 输出 [1, 2, 3, 4, 5, 6]
使用 del 删除元素
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
del my_list[2:5] # 删除[2, 5)之间的元素
print(my_list) # 输出 [1, 2, 6, 7, 8, 9]
使用 pop(index = -1) 移除元素:index默认为-1可以修改
# 例1
list_1 = [1, 2, 3, 4, 1]
list_1.pop()
print(list_1) # 输出 [1, 2, 3, 4]
list_1.pop(0) # 输出 [2, 3, 4]
# 例2
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
indices_to_remove_index = [2, 4, 6]
indices_to_remove_index.sort(reverse=True) # 从后往前删,避免索引错位 [6, 4, 2]
for index in indices_to_remove_index:
my_list.pop(index)
print(my_list) # 输出 [1, 2, 4, 6, 8, 9]
使用 remove(obj) 移除列表中第一次出现的 obj 元素
# 例1
list_1 = [1, 2, 3, 4, 1]
list_1.remove(1)
print(list_1) # 输出 [2, 3, 4, 1]
# 例2
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
elements_to_remove = [3, 5, 7]
for element in elements_to_remove:
my_list.remove(element)
print(my_list) # 输出 [1, 2, 4, 6, 8, 9]
使用 clear 清空列表
list_1 = [1,2,3,4,5]
list_1.clear()
print(list_1) # 输出 []
pop()方法和remove()不推荐使用,因为删除元素后列表大小会变,导致列表索引也会改变,容易出错
使用index()方法:查找列表中元素第一次出现的位置
index(obj,start = 0 , end = -1)
obj: 要查找的元素
start: 查找的起始位置
end: 查找的结束位置(不包含该位置)
# 遍历查找
# 使用index()方法
list_1 = [1,2,3,4,5]
list_1.index(3) # 返回索引 2
[1,2,3]+[4,5,6] -> [1,2,3,4,5,6] # 组合
['Hi!'] * 4 -> ['Hi!', 'Hi!', 'Hi!', 'Hi!'] # 重复
3 in [1,2,3] -> True # 元素是否存在于列表中
求列表长度/大小
len(list) # 一维列表: 元素个数; 二维列表:返回行数
比较两个列表的大小
cmp(list1, list2)
# 如果是数字,按大小比较
# 如果一方数字,另一方非数字,数字是最小的
# 如果都不是数字,按字母顺序比较 a < b,a > A等
# list1 > list2, 返回1
# list1 < list2, 返回-1
# list1 = list2, 返回0
求列表的最大最小元素
max(list) # 返回最大元素
min(list) # 返回最小元素
统计列表中某个元素出现的次数
list1 = [1,2,3,4,1,2,1,2,1]
print(list1.count(1)) # 输出 4,1出现4次
对列表元素进行排序: sort默认升序,设置reverse = True则为降序排列
list1 = [3,5,6,1,2,9]
list1.sort()
print(list1) # [1, 2, 3, 5, 6, 9]
list1.sort(reverse = True)
print(list1) # [9, 6, 5, 3, 2, 1]
列表元素反转,反向排序: reverse()函数
list1 = [4,3,1,6,7]
list1.reverse()
print(list1) # [7, 6, 1, 3, 4]
判断一个元素是否在列表内
# 1. 遍历查找
# 2. 使用index()函数: 存在则返回第一个匹配元素的索引位置,不存在则抛出异常,所以可以如下写
index = -1
index = list.index(obj)
if index != -1:
print('obj is found!')
# 3. 使用.count()方法:判断某个元素在列表中出现的次数
num = list.count(element)
将二维列表转换为一维列表
# 1. 遍历转换: 两层for循环
list1 = [[1, 2], [3, 4]]
new_list = [item for list in list1 for item in list]
print(new_list)
# 2. list->array->list, array使用flatten方法
import numpy as np
list1 = [[1, 1], [2, 2]]
list1 = np.array(list1)
ans = list1.flatten()
ans = ans.tolist()
列表作为函数参数
可变类型:list ,dict
不可变类型:int , string , float ,tuple
列表作为函数参数,运行函数会改变原始列表数据,如下
a = [1, 2, 'A']
def F(A):
A.pop()
print(A) # 输出 [1, 2]
F(a)
print(a) # 输出 [1, 2]
如果不希望这种情况发生,可以先拷贝一份,避免破坏原始数据
a = [1, 2, 'A']
def F(A):
lst_copy = A.copy() # 当列表有多重列表时,需要用deepcopy
lst_copy.pop()
print(lst_copy) # 输出 [1, 2]
F(a)
print(a) # 输出 [1, 2, 'A'] 没变
【参考文章】
[1]. python列表创建的方式
[2]. 二维列表的遍历
[3]. 二维列表的创建
[4]. 二维列表按行按列访问
[5]. 二维列表不能直接切片
[6]. 二维列表的创建与访问
[7]. 删除列表中多个元素
[8]. 列表元素删除方法比较
[9]. 列表操作详解
[10]. 列表的基本用法
[11]. 列表的基本用法
[12]. 判断元素是否在列表内
[13]. 二维列表转换为一维
[14]. 列表作为函数形参
[15]. 列表作为传参copy
created by shuaixio, 2023.12.02