Python数据类型之列表类型
Python中的列表(list)可以用来存储多个不同的数据类型,列表是有序可重复的,每个数据都有自己确切的位置,可以通过索引来获取指定的元素。
注意: 列表是可变数据类型。
创建列表
格式:
[数据1, 数据2, 数据3, ...]
示例:
# 创建空列表
# 方式1
list1 = []
# 方式2
list11 = list()
print(list11) # []
print(type(list11)) # <class 'list'>
# 创建有数据的列表
list2 = [1, 2, 3, 4, 5, 6]
# 列表中存放不同的数据类型
list3 = [1, 2, "abc", 4, 5, True]
# 嵌套列表
list4 = [[1,2,3], True, 4]
列表元素的访问
对列表中的元素进行操作都需要通过索引来完成,索引可以理解为该元素在列表内所在的位置。索引从0开始,依次类推,注意不能超过索引范围。
name_list = ["tom", "jerry", "jack"]
print(name_list) # ['tom', 'jerry', 'jack']
# 访问第一个元素
print(name_list[0]) # tom
# 访问第二个元素
print(name_list[1]) # jerry
# 访问第三个元素
print(name_list[2]) # jack
# 超出索引的范围就会报错
print(name_list[3]) # IndexError: list index out of range
# 嵌套列表元素的访问
name_list = [["tom", "jerry", "lisi"], ["张三", "李四", "王五"]]
print(name_list[1][2]) # 王五
列表的切片操作
列表切片,就是从列表中截取某一部分。
格式:
# start: 起始索引,end: 结束索引,step: 步长
列表序列[start:end:step]
注意: 切片的结果不包括end
结束索引,也就是左闭右开,-1代表列表最后一个位置索引。
指定开始和结束索引
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[0:3]) # ['小明', '小王', '小红']
# 索引可以为负数
print(user_list[1:-2]) # ['小王', '小红']
# 如果结束索引超出索引范围,则以列表长度作为索引。
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:8]) # ['小明', '小王', '小红', 'Tom', 'Jerry']
指定开始索引不指定结束索引
如果不指定结束索引,则列表会截取到末尾。
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[2:]) # # ['小红', 'Tom', 'Jerry']
指定结束索引,不指定开始索引
如果不指定开始索引,则默认从索引0开始。
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:2]) # ['小明', '小王']
指定切片步长
user_list = ["小明", "小王", "小红", "Tom", "Jerry"]
print(user_list[:4:2]) # ['小明', '小红']
print(user_list[-1:1:-1]) # ['Jerry', 'Tom', '小红']
print(user_list[::-1]) # ['Jerry', 'Tom', '小红', '小王', '小明']
修改列表元素的值
name_list = ["tom", "jerry", "jack"]
name_list[0] = "aaa"
print(name_list) # ['aaa', 'jerry', 'jack']
列表中元素删除的操作
del
name_list = ["tom", "jerry", "jack"]
del name_list
print(name_list) # NameError: name 'name_list' is not defined
# 删除指定位置的数据
name_list1 = ["toms", "jerrys", "jacks"]
del name_list1[1]
print(name_list1) # ['toms', 'jacks']
# 使用切片的方式删除多个
name_list2 = ["tom", "jerry", "jack", "alis"]
del name_list2[0:3]
print(name_list2) # ['alis']
pop()
删除指定下标的数据,如果不指定下标,默认删除最后一个数据,返回这个被删除的数据。
name_list = ["tom", "jerry", "jack"]
print(name_list.pop()) # jack
print(name_list) # ['tom', 'jerry']
# 删除指定下标的数据
name_list1 = ["tom", "jerry", "jack"]
print(name_list1.pop(2)) # jack
print(name_list1) # ['tom', 'jerry']
remove()
移除列表中指定值的第一个匹配项。
name_list = ["tom", "jerry", "jack", "jerry"]
name_list.remove("jerry")
print(name_list) # ['tom', 'jack', 'jerry']
clear()
清空列表。
name_list = ["tom", "jerry", "jack", "jerry"]
name_list.clear()
print(name_list) # []
列表常见的操作
in
: 判断指定数据是否在列表中,如果在返回True,否则返回False。
name_list = ["tom", "jerry", "jack", "lisa"]
print("lisa" in name_list) # True
print("jerrys" in name_list) # False
not in
: 判断指定数据是否不在列表中,如果不在返回True,否则返回False。
name_list = ["tom", "jerry", "jack", "lisa"]
print("toms" not in name_list) # True
print("lisa" not in name_list) # False
+
: 组合列表
list1 = ["a", "b", "c"]
list2 = ["d", "e", "f"]
print(list1 + list2) # ['a', 'b', 'c', 'd', 'e', 'f']
*
重复列表
list1 = ["a", "b"]
print(list1*3) # ['a', 'b', 'a', 'b', 'a', 'b']
列表常见的方法
index()
返回指定数据在列表中第一次出现位置的下标。
语法:
列表序列.index(要查找的数据, 开始位置下标, 结束位置下标)
示例:
name_list = ["tom", "jerry", "jack", "jack"]
print(name_list.index("tom")) # 0
print(name_list.index("jack")) # 2
# 如果指定的元素不存在则抛出异常
print(name_list.index("toms")) # ValueError: 'toms' is not in list
count()
统计指定数据在当前列表中出现的次数。
name_list = ["tom", "jerry", "jack"]
print(name_list.count("jerry")) # 1
len()
返回列表的长度。
name_list = ["tom", "jerry", "jack"]
print(len(name_list)) # 3
append()
向列表末尾追加数据。
my_list = ["a", "b"]
# 追加一个元素
my_list.append("c")
print(my_list) # ['a', 'b', 'c']
# 追加一个列表
my_list.append([1, 2])
print(my_list) # ['a', 'b', 'c', [1, 2]]
extend()
向列表末尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表中。
name_list = ["tom", "jerry", "jack"]
name_list.extend("hello")
print(name_list) # ['tom', 'jerry', 'jack', 'h', 'e', 'l', 'l', 'o']
name_list2 = ["tom", "jerry", "jack"]
name_list2.extend(["xiaoming", "xiaowang"])
print(name_list2) # ['tom', 'jerry', 'jack', 'xiaoming', 'xiaowang']
insert()
向列表指定位置添加数据。
name_list = ["tom", "jerry", "jack"]
# name_list.insert(下标, 数据)
name_list.insert(1, "xiaowang")
print(name_list) # ['tom', 'xiaowang', 'jerry', 'jack']
reverse()
反向列表中的元素。
list1 = [1 ,2 ,3 ,4 ,5]
list1.reverse()
print(list1) # [5, 4, 3, 2, 1]
sort()
对列表进行排序。
语法:
列表序列.sort(key=None, reverse=False)
注:
reverse参数: 表示排序规则,reverse = True
降序, reverse = False
升序(默认)。
key参数: 指定在进行比较之前每个列表元素上要调用的函数,将函数的返回值作为比较的依据。
list1 = [1 ,3 ,4 ,2 ,5]
# 默认升序排序
list1.sort()
print(list1) # [1, 2, 3, 4, 5]
# 指定为降序排序
list2 = [1 ,3 ,4 ,2 ,5]
list2.sort(reverse=True)
print(list2) # [5, 4, 3, 2, 1]
# key参数示例
list3 = [(2, 3), (3, 1), (2, 2), (1, 4)]
list3.sort(key=lambda x: x[1])
print(list3) # [(3, 1), (2, 2), (2, 3), (1, 4)]
copy()
复制列表。
name1 = ["tom", "jerry", "lisi"]
name2 = name1.copy()
print(name2) # ['tom', 'jerry', 'lisi']
max()
获取列表的最大值
list1 = ["a", "b", "c", "d"]
print(max(list1)) # d
list2 = [1, 2, 3, 4, 5]
print(max(list2)) # 5
# max可以传入多个参数
print(max(1, 3, 5, 7)) # 7
min()
获取列表的最小值
list1 = ["a", "b", "c", "d"]
print(min(list1)) # a
list2 = [1, 2, 3, 4, 5]
print(min(list2)) # 1
# max可以传入多个参数
print(min(3, 5, 7, 9)) # 3
列表推导式
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。
示例:
list1 = [i for i in range(10)]
print(list1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [i*2 for i in range(5)]
print(list2) # [0, 2, 4, 6, 8]
带if条件的列表推导式:
list1 = [i for i in range(10) if i % 2 == 0]
print(list1) # [0, 2, 4, 6, 8]
list2 = [0, 2, 3, -4, -6, 5]
list3 = [i for i in list2 if i >= 0]
print(list3) # # [0, 2, 3, 5]
多个for的列表推导式:
list1 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list1) # [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
遍历列表
使用while循环
name_list = ["tom", "jerry", "lisi"]
i = 0
while i < len(name_list):
print(name_list[i])
i += 1
使用for循环
name_list = ["tom", "jerry", "lisi"]
for i in name_list:
print(i)
使用for循环和range()
name_list = ["tom", "jerry", "lisi"]
for i in range(len(name_list)):
print(name_list[i])
使用enumerate函数
enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列,可以获取数据及其索引。
语法:
enumerate(可遍历对象, start=0)
注: start参数用来设置遍历数据下标的起始值,默认是0
示例:
name_list = ["tom", "jerry", "lisi"]
for item in enumerate(name_list):
print(item)
# 打印结果如下,元组类型
(0, 'tom')
(1, 'jerry')
(2, 'lisi')
for index, item in enumerate(name_list):
print(index, item)
# 打印结果如下
0 tom
1 jerry
2 lisi
使用iter()内置函数
name_list2 = ["tom", "jerry", "jack", "alis"]
for i in iter(name_list2):
print(i)
使用推导式
name_list = ["tom", "jerry", "lisi"]
[print(x) for x in name_list]