列表由一系列按特定顺序排列的元素组成,元素可以是整数,浮点数或者是字符串,由[]括起来。
例如:
# 列表
lst = ['hello', 'world', 99] # 列表
print(lst)
print(type(lst))
print(lst[0], lst[1], lst[2])
上述代码首先创建了列表lst,并且进行打印输出。
在python中,顺序从0开始,上述最后一行代码是一次打印输出列表的第1、2、3个元素。
列表的创建可以直接用[]括起来进行创建,也可以用list()函数进行创建。
# 列表的创建
lst = ['hello', 'world', 99] # 列表创建的第一种方式,使用[]
lst_2 = list(['hello', 'world', 99]) # 列表创建的第一种方式,使用内置函数list()
print(lst)
print(lst_2)
print(lst[0], lst[1], lst[2])
print(lst_2[0], lst_2[1], lst_2[2])
列表的特点是:
(1) 每个元素具有唯一的索引值,也就是每个元素有自己的序号,第一个元素序号为0,从左往右数的顺序是0,1,2,…,从右往左数的顺序是-1,-2,-3,…;
(2) 列表可以存储重复的元素。
# 列表的特点
# 有序排序
lst = ['hello', 'world', 99] # 列表
print(lst)
# 索引映射唯一数据 lst = ['hello', 'world', 99]里面三个位置是0,1,2逆序是-1,-2,-3
print(lst[0])
print(lst[-3])
# 列表可以存储重复数据
lst_1 = ['hello', 'world', 99, 99]
print(lst_1)
使用index()函数可以获取列表元素中指定元素的索引值。
如果列表中有多个相同元素,只返回第一个元素的索引;如果需要获取某个重复元素的索引值,应该限定其范围。
# 获取指定元素的索引
lst_3 = ['hello', 'world', 99, 'hello']
print(lst_3.index('hello')) # 获取hello的索引
# 如果列表中有多个相同元素,只返回第一个元素的索引
print(lst_3.index('hello', 1, 4)) # 获取hello的索引,在一定的范围内
# 列表的查询
"""正向索引0到N-1,逆向索引从-1开始递减,即-N到-1"""
lst_4 = ['hello', 'world', 99, 'hello', 'world', 99]
print(lst_4[2]) # 获取索引为2的元素
print(lst_4[-3]) # 获取索引为-3的元素
列表的切片操作是获取列表的部分元素或者全部元素,常用方法是:
lst2 = lst1[起始值:终止值:步长]
上述含义是切片开始为起始值,终止为终止值但不到终止值。
# 列表的切片操作,获取多个元素
# 切片的结果是原列表的拷贝
lst_5 = [10, 20, 30, 40, 50, 60, 70, 80]
print(lst_5[1:6:1]) # 切片开始为1,终止为6但不到6,步长为1
# 切出来的是一个新的列表对象
lst_6 = lst_5[1:6:1]
print(id(lst_5))
print(id(lst_6))
print(lst_5[1:6]) # 切片开始为1,终止为6但不到6,默认步长为1
print(lst_5[1:6:2]) # 切片开始为1,终止为6但不到6,步长为2
print(lst_5[:6:2]) # 切片默认开始为0,终止为6但不到6,步长为2
print(lst_5[1::2]) # 切片开始为1,默认终止到N-1包括N-1,步长为2
# 步长为负数
print(lst_5)
print(lst_5[::-1]) # 逆序输出列表
print(lst_5[7::-1]) # 逆序输出列表7开始,步长-1
print(lst_5[6:0:-2]) # 逆序输出列表6开始,步长-2,,到0不包括0
判断某一元素是否在列表中,常用in来判断;
列表元素的变量常常用for循环变量
# 列表元素的判断及遍历
lst_7 = [10, 20, 'python', 'hello']
print(10 in lst_7) # True
print(100 in lst_7) # False
print(10 not in lst_7) # False
print(100 not in lst_7) # True
# 遍历列表中的元素
for i in lst_7:
print(i)
(1) 列表的末尾添加一个元素用append()函数,增加元素之后还是同一列表。
# 列表的末尾添加一个元素 append()
lst_8 = [10, 20, 30]
print('原列表', lst_8)
lst_8.append(100)
lst_9 = lst_8
print('新列表', lst_9)
print(id(lst_8), id(lst_9)) # 增加元素之后还是同一列表
lst_10 = ['hello', 'python']
lst_8.append(lst_10)
print(lst_8)
# 使用append()只能在列表的末尾添加一个元素,会把['hello', 'python']当成一个元素
在上述代码中,使用append()只能在列表的末尾添加一个元素,会把[‘hello’, ‘python’]当成一个元素。
(2) 列表的末尾添加至少一个元素用extend()函数
# 列表的末尾添加至少一个元素 extend()
lst_8.extend(lst_10)
print(lst_8)
(3) 列表的任意位置插入一个元素用insert()函数
# 列表的任意位置插入一个元素 insert()
lst_8.insert(1, 90) # 索引为1的位置上添加90
print(lst_8)
(4) 列表的任意位置至少插入一个元素用切片
# 列表的任意位置至少插入一个元素
lst_11 = ['hell0', 'world']
lst_8[1:] = lst_11 # 从1开始后面的数全部切掉,用新的列表替换
print(lst_8)
lst_8[1:1] = lst_11 # 从1开始后面的数全部切掉,用新的列表替换,相当于在1的位置上插入
print(lst_8)
# 列表元素的添加
# 列表的末尾添加一个元素 append()
lst_8 = [10, 20, 30]
print('原列表', lst_8)
lst_8.append(100)
lst_9 = lst_8
print('新列表', lst_9)
print(id(lst_8), id(lst_9)) # 增加元素之后还是同一列表
lst_10 = ['hello', 'python']
lst_8.append(lst_10)
print(lst_8)
# 使用append()只能在列表的末尾添加一个元素,会把['hello', 'python']当成一个元素
# 列表的末尾添加至少一个元素 extend()
lst_8.extend(lst_10)
print(lst_8)
# 列表的任意位置插入一个元素 insert()
lst_8.insert(1, 90) # 索引为1的位置上添加90
print(lst_8)
# 列表的任意位置至少插入一个元素
lst_11 = ['hell0', 'world']
lst_8[1:] = lst_11 # 从1开始后面的数全部切掉,用新的列表替换
print(lst_8)
lst_8[1:1] = lst_11 # 从1开始后面的数全部切掉,用新的列表替换,相当于在1的位置上插入
print(lst_8)
(1) 从列表中移除一个元素用remove()函数,如果有重复元素,只移除第一个元素。
lst_12 = [10, 20, 30, 40, 50, 60, 30]
lst_12.remove(30) # 从列表中移除一个元素,如果有重复元素,只移除第一个元素
print(lst_12)
(2) 删除指定位置元素用pop()函数,不指定位置时,默认删除最后一个元素
# 删除指定位置元素,不指定位置时,默认删除最后一个元素
lst_12.pop(1)
print(lst_12)
lst_12.pop()
print(lst_12)
(3) 删除至少一个元素用切片
# 切片,删除至少一个元素,将产生一个新的列表对象
lst_13 = lst_12[1:3] # 保留原列表1-3但不包括3的元素
print('原列表', lst_12)
print('新列表', lst_13)
lst_12[1:3] = [] # 将列表的1,2的数删除,不产生新的列表
print(lst_12)
# 清除列表的所有元素,clear()
lst_12.clear()
print(lst_12)
# 列表的删除
lst_12 = [10, 20, 30, 40, 50, 60, 30]
lst_12.remove(30) # 从列表中移除一个元素,如果有重复元素,只移除第一个元素
print(lst_12)
# 删除指定位置元素,不指定位置时,默认删除最后一个元素
lst_12.pop(1)
print(lst_12)
lst_12.pop()
print(lst_12)
# 切片,删除至少一个元素,将产生一个新的列表对象
lst_13 = lst_12[1:3] # 保留原列表1-3但不包括3的元素
print('原列表', lst_12)
print('新列表', lst_13)
lst_12[1:3] = [] # 将列表的1,2的数删除,不产生新的列表
print(lst_12)
# 清除列表的所有元素,clear()
lst_12.clear()
print(lst_12)
# 删除列表对象 del
修改单个元素是直接对指定索引值的元素进行修改,多个元素修改用切片。
# 列表元素的修改
lst_14 = [10, 20, 30, 40]
# 一次修改一个值
lst_14[2] = 100 # 将索引为2的值修改成100
print(lst_14)
# 修改列表的多个值
lst_14[1:3] = [300, 400, 500, 600] # 将1-3但不包括3的值修改成300, 400, 500, 600
print(lst_14)
排序用sort()函数,其中sort()函数和sorted()函数的区别在于sort()函数会改变原列表,sorted()函数不会改变原列表。
举个例子:lst = [ 3 2 4]
使用sort()函数,lst会变成lst = [ 2 3 4]
而使用sorted()函数,会产生lst的复制lst1=[ 2 3 4],但是lst不变还是lst = [ 2 3 4]。
# 列表元素的排序
lst_15 = [10, 20, 99, 98, 100]
print('排序前的列表', lst_15, id(lst_15))
# 开始排序,sort(),默认升序排序,不产生新的列表
lst_15.sort()
print('排序后的列表', lst_15, id(lst_15))
# 降序排序 sort(reverse=True),不产生新的列表
lst_15.sort(reverse=True)
print('排序后的列表', lst_15, id(lst_15))
# 升序排序 sort(reverse=False),不产生新的列表
lst_15.sort(reverse=False)
print('排序后的列表', lst_15, id(lst_15))
print('*' * 50)
# 升序排序
lst_15 = [10, 20, 99, 98, 100]
lst_16 = sorted(lst_15) # 升序排序,产生一个新的列表
print('排序前的列表', lst_15, id(lst_15))
print('排序后的列表', lst_16, id(lst_16))
# 降序排序
lst_15 = [10, 20, 99, 98, 100]
lst_16 = sorted(lst_15, reverse=True) # 降序排序,产生一个新的列表
print('排序前的列表', lst_15, id(lst_15))
print('排序后的列表', lst_16, id(lst_16))
列表生成式是for循环和列表结合的快速生成列表元素的一种方式
# 列表生成式
# 产生1-9的整数列表
lst_17 = [i for i in range(1, 10)]
print(lst_17)
# 产生1-9的整数平方列表
lst_17 = [i * i for i in range(1, 10)]
print(lst_17)
lst_17 = [i for i in range(2, 12, 2)]
print(lst_17)