一、定义
列表是有序的对象集合,使用中括号[ ]包围,元素之间用逗号分隔
列表是动态的,可以随时添加或删除元素
列表是异构的,可以包含不同类型的数据
列表中允许出现重复元素
二、创建
- 通过中括号创建
- 通过构造方法list()创建
- 通过列表推导式创建
# 中括号创建
li1 = []
print(li1) # 输出:[]
li1 = [1, "2", True]
print(li1) # 输出:[1, "2", True]
# 构造方法list()创建
li2 = list()
print(li2) # 输出:[]
li2 = list("good") # 字符串、元组、列表、集合、字典等均可
print(li2) # 输出:['g', 'o', 'o', 'd']
# 列表推导式创建
li3 = [i for i in range(0,4)]
print(li3) # 输出:[0, 1, 2, 3]
三、列表使用
1、索引
因为列表是有序的,可以通过索引取到列表中对应位置的值。
- 正向索引,编号从0开始。
- 反向索引,编号从-1开始。
写法:list[index]
li = [1, 2, 3, 4, 5]
print(li1[0]) # 输出:1
print(li1[-1]) # 输出:5
2、切片
在索引的基础上,不只取单个值,可以取列表的一段。
写法:list[start: stop: step]
- start:指示开始索引值,默认为0
- stop:指示结束索引值(不包括结束索引值本身),默认取最大索引值。
- step:步长值,默认为1。
注:切片遵循前闭后开原则,strat值从start值本身开始,stop取到stop的前一个值。
li = list("good boy")
print(li[0:-1:1]) # 输出:['g', 'o', 'o', 'd', ' ', 'b', 'o']
print(li[2:4]) # 输出:['o', 'd'],省略step
print(li[:4]) # 输出:['g', 'o', 'o', 'd'],省略start、step
print(li[2:]) # 输出:['o', 'd', ' ', 'b', 'o', 'y'],省略stop、step
print(li[::-2]) # 输出:['y', 'b', 'd', 'o'],省略start、stop,逆序、步进2打印。
3、运算符
重复:使用 * 运算符可以重复生产列表元素
合并:使用 + 运算符可以将两个列表合二为一
li1 = [1, 'a'] * 5
print(li1) # 输出:[1, 'a', 1, 'a', 1, 'a', 1, 'a', 1, 'a']
li2 = ["a", "b"]
li3 = list([1, 2, 3])
print(li3 + li2) # 输出:[1, 2, 3, 'a', 'b']
4、成员检测
in:检查某个元素是否在列表中。如果在返回True,否则返回False。
not in:检查一个列表是否不包含某个元素。如果不在返回True,否则返回False。
li = [i for i in range(1,4)]
print(1 in li) # 输出:True
print(100 not in li) # 输出:True
四、常用方法
1、append()
将单个对象添加到列表的末尾
写法:list.append(item)
入参:对象item
返回:None
li = []
li.append("good")
li.append([1, "a"])
li.append({'a': 1})
print(li.append(1)) # 输出:None
print(li) # 输出:['good', [1, 'a'], {'a': 1}, 1]
print(len(li)) # 输出:4
2、extend()
将一个可迭代对象的所有元素,添加到列表末尾
写法:list.extend(iterable)
入参:可迭代对象iterable
返回:None
li = []
li.extend("good")
li.extend([1, "a"])
print(li.extend({'a': 1})) # 输出:None
print(li) # 输出:['g', 'o', 'o', 'd', 1, 'a', 'a']
print(len(li)) # 输出:7
3、insert()
将一个对象插入到指定的索引位置
写法:list.insert(index, item)
入参:索引值index,对象item
返回:None
原索引位置及后面的元素后移一位
li = [1, 2, 3]
print(li.insert(0, "good")) # 输出:None
print(li) # 输出:['good', 1, 2, 3]
li.insert(3, ["a", "b"])
print(li) # 输出:['good', 1, 2, ['a', 'b'], 3]
4、pop()
删除并返回所指定索引的元素
写法:list.pop(index) 或 list.pop()
入参:索引值index,可不传
返回:指定索引的元素,未指定索引则返回末尾元素
如果索引值不正确或者列表已经为空,则引发IndexError错误
li = [1, 2, 3, 4, 5]
print(li.pop(1)) # 输出:2
print(li) # 输出:[1, 3, 4, 5]
print(li.pop()) # 输出:5
print(li) # 输出:[1, 3, 4]
li.pop(3) # IndexError: pop index out of range
li1 = []
li1.pop() # IndexError: pop from empty list
5、remove()
移除列表中第一个等于item的元素
写法:list.remove(item)
入参:指定元素item
返回:None
目标元素不存在,则引发ValueError错误
li = [1, 2, "a", "b"]
print(li.remove(2)) # 输出:None
print(li) # 输出:[1, 'a', 'b']
li.remove("c")
print(li) # ValueError: list.remove(x): x not in list
6、sort()
对列表进行原地排序,只使用 < 来进行各项间的比较
写法:list.sort(key=None, reverse=False)
入参:支持2个关键字参数:
- key:指定带有一个参数的函数,用于从每个列表元素中提取比较键
- reverse:默认值为False表示升序,为True表示降序
返回:None
nums = [2, 4, 3, 1, 5]
print(nums.sort()) # 输出:None
print(nums) # 输出:[1, 2, 3, 4, 5]
nums.sort(reverse=True)
print(nums) # 输出:[5, 4, 3, 2, 1]
words = ["Python", "Java", "R", "Go"]
words.sort(key=len)
print(words) # 输出:['R', 'Go', 'Java', 'Python']
7、reverse()
将列表中的元素顺序反转
写法:list.reverse()
入参:无
返回:None
反转只是针对索引值,元素之间不相互比较
nums = [8, 1, 5, 85, 77]
print(nums.reverse()) # 输出:None
print(nums) # 输出:[77, 85, 5, 1, 8]
五、列表嵌套
嵌套列表是指在列表里存放列表
列表的常用方法都适用于嵌套列表
li = [['a', 'b', 'c'], [1, 2, 3]]
print(li[1][2]) # 输出:3
li[0].append('d')
print(li) # 输出:[['a', 'b', 'c', 'd'], [1, 2, 3]]
li[0][1] = 1
print(li) # 输出:[['a', 1, 'c', 'd'], [1, 2, 3]]
六、列表推导式
列表推导式是指循环创建列表,相当于for循环创建列表的简化版。
写法:[x for x in … if …]
# for循环创建列表
li1 = []
for i in range(1, 11):
if i % 2 == 0:
li1.append(i ** 2)
print(li1) # 输出:[4, 16, 36, 64, 100]
# 列表推导式创建列表
li2 = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(li2) # 输出:[4, 16, 36, 64, 100]
# 无else时,if在for循环之后
# for循环创建列表
li1 = []
for i in range(1, 11):
if i % 2 == 0:
li1.append(i ** 2)
else:
li1.append(i)
print(li1) # 输出:[1, 4, 3, 16, 5, 36, 7, 64, 9, 100]
# 列表推导式创建列表
li2 = [i ** 2 if i % 2 == 0 else i for i in range(1, 11)]
print(li2) # 输出:[1, 4, 3, 16, 5, 36, 7, 64, 9, 100]
# 有else时,if…else在for循环之前