1. 列表(List)
列表是Python中最常用的数据结构之一,用于存储有序、可修改的元素集合。它支持多种数据类型的元素,甚至可以嵌套其他列表,灵活性极高。
1.1 列表的创建
列表通过方括号[]定义,元素之间用逗号分隔。
- 基本创建:可包含单一类型或多种类型的元素
- 空列表:用[]或list() 函数创建
- 嵌套列表:列表中可包含其他列表
示例:
#单一类型元素的列表
nums = [1, 2, 3, 4, 5]
print(nums) #输出:[1, 2, 3, 4, 5]
#多种类型元素的列表
mixed = [1, "hello", 3.14, True]
print(mixed) #输出:[1, 'hello', 3.14, True]
#空列表
empty_list = []
empty_list2 = list() #另一种创建空列表的方式
print(empty_list, empty_list2) #输出:[] []
#嵌套列表(列表中的元素是列表)
nested = [[1, 2], [3, 4], [5, 6]]
print(nested) #输出:[[1, 2], [3, 4], [5, 6]]
#末尾元素带逗号(语法允许,不影响结果)
fruits = ["apple", "banana", "orange", ]
print(fruits) #输出:['apple', 'banana', 'orange']2. 列表的索引与访问
列表中的元素通过索引(index) 访问,索引从0开始(即第一个元素索引为0,第二个为1,以此类推)。
- 索引超出列表范围会触发IndexError
- 支持负索引:从末尾开始计数(最后一个元素索引为-1,倒数第二个为-2)
- 嵌套列表通过多层索引访问内部元素
示例:
nums = [10, 20, 30, 40, 50]
#访问正数索引元素
print(nums[0]) #输出:10(第一个元素)
print(nums[2]) #输出:30(第三个元素)
#访问负索引元素
print(nums[-1]) #输出:50(最后一个元素)
print(nums[-3]) #输出:30(倒数第三个元素)
#访问嵌套列表元素
nested = [[1, 2], [3, 4], [5, 6]]
print(nested[1][0]) #输出:3(访问第二个子列表的第一个元素)
#索引超出范围(报错示例)
# print(nums[10]) #触发 IndexError: list index out of range3. 列表与字符串的相似性(索引行为)
字符串可以像列表一样通过索引访问单个字符(字符串可视为 “不可修改的字符列表”)。
示例:
s = "hello"
print(s[0]) #输出:h(字符串第一个字符)
print(s[-1]) #输出:o(字符串最后一个字符)4. 列表的可变性
与字符串不同,列表是可修改的(mutable),可以直接修改指定索引的元素值。
示例:
nums = [1, 2, 3]
nums[1] = 200 #修改索引1的元素
print(nums) #输出:[1, 200, 3]
# 字符串不可修改(对比示例)
s = "hello"
# s[0] = "H" #触发 TypeError: 'str' object does not support item assignment5. 列表的基本操作
5.1 拼接与重复
- 用 + 拼接两个列表(生成新列表,不修改原列表)
- 用 * 重复列表元素(生成新列表)
示例:
a = [1, 2]
b = [3, 4]
#拼接
c = a + b
print(c) #输出:[1, 2, 3, 4]
#重复
d = a * 3
print(d) #输出:[1, 2, 1, 2, 1, 2]5.2 拼接与重复
成员检查(in / not in)
用in检查元素是否在列表中,not in检查是否不在列表中(同样适用于字符串子串检查)。
示例:
fruits = ["apple", "banana", "orange"]
#检查元素是否在列表中
print("banana" in fruits) #输出:True
print("grape" in fruits) #输出:False
#检查元素是否不在列表中
print("grape" not in fruits) #输出:True
#字符串子串检查(类似逻辑)
s = "hello world"
print("world" in s) #输出:True6. 列表切片
通过切片可以快速获取列表的子列表,语法:list[start:end:step](左闭右开,即包含start不包含end)。
- start:起始索引(默认0)
- end:结束索引(默认列表长度)
- step:步长(默认1,可正可负)
示例:
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#取索引1到4的元素(不包含4)
print(nums[1:4]) # 输出:[1, 2, 3]
#从索引2取到末尾
print(nums[2:]) # 输出:[2, 3, 4, 5, 6, 7, 8, 9]
#从开头取到索引5(不包含5)
print(nums[:5]) # 输出:[0, 1, 2, 3, 4]
#步长为2(隔一个取一个)
print(nums[::2]) # 输出:[0, 2, 4, 6, 8]
#反转列表(步长为-1)
print(nums[::-1]) # 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]7. 列表常用函数与方法
7.1 内置函数
- len(list):返回列表元素个数
- max(list):返回列表中最大值(元素需可比较)
- min(list):返回列表中最小值(元素需可比较)
- list(iterable):将可迭代对象(如range)转换为列表
示例:
nums = [3, 1, 4, 1, 5, 9]
print(len(nums)) #输出:6(元素个数)
print(max(nums)) #输出:9(最大值)
print(min(nums)) #输出:1(最小值)7.2 列表方法(list.方法名())
- append(x):在列表末尾添加元素x
- insert(i, x):在索引i处插入元素x(原元素后移)
- index(x):返回元素x第一次出现的索引(x不存在则触发 ValueError)
- count(x):返回元素x在列表中出现的次数
- remove(x):删除第一个出现的元素x(x不存在则触发 ValueError)
- pop(i):删除并返回索引i处的元素(默认删除最后一个)
- reverse():反转列表(原地修改)
- sort():对列表排序(原地修改,默认升序)
- clear():清空列表(删除所有元素)
- copy():返回列表的浅复制(避免修改原列表影响副本)
示例:
# append:添加元素到末尾
fruits = ["apple", "banana"]
fruits.append("orange")
print(fruits) #输出:['apple', 'banana', 'orange']
# insert:指定位置插入
fruits.insert(1, "grape") #在索引1处插入
print(fruits) #输出:['apple', 'grape', 'banana', 'orange']
# index:查找元素索引
print(fruits.index("banana")) #输出:2
# count:统计元素出现次数
nums = [1, 2, 2, 3, 2]
print(nums.count(2)) #输出:3
# remove:删除第一个匹配元素
nums.remove(2)
print(nums) #输出:[1, 2, 3, 2]
# pop:删除并返回元素
x = nums.pop(1) #删除索引1的元素
print(x, nums) #输出:2 [1, 3, 2]
# reverse:反转列表
nums.reverse()
print(nums) #输出:[2, 3, 1]
# sort:排序
nums.sort() #升序
print(nums) # 输出:[1, 2, 3]
nums.sort(reverse=True) # 降序
print(nums) #输出:[3, 2, 1]
# clear:清空列表
fruits.clear()
print(fruits) #输出:[]
# copy:复制列表
a = [1, 2, 3]
b = a.copy() #等价于 b = a[:]
b[0] = 100
print(a) #输出:[1, 2, 3](原列表不受影响)
print(b) #输出:[100, 2, 3]8. 范围(Range)对象
range()用于生成有序整数序列,常与列表结合使用(需用list() 转换为列表)。
8.1 语法结构
语法:range(start, end, step)
start:起始值(默认 0)
end:结束值(不包含,必填)
step:步长(默认 1,可为负数,必须是整数)示例:
#单参数:range(end) → 0 到 end-1
r1 = range(5)
print(list(r1)) #输出:[0, 1, 2, 3, 4]
#双参数:range(start, end) → start 到 end-1
r2 = range(2, 6)
print(list(r2)) #输出:[2, 3, 4, 5]
#三参数:range(start, end, step) → 按步长递增
r3 = range(1, 10, 2)
print(list(r3)) #输出:[1, 3, 5, 7, 9]
#步长为负(递减)
r4 = range(5, 0, -1)
print(list(r4)) #输出:[5, 4, 3, 2, 1]
#步长非整数(报错示例)
# range(1, 5, 0.5) #触发 TypeError: 'float' object cannot be interpreted as an integer