Python快速学习——第3章:列表

5 阅读6分钟

第三章:列表

3.1 什么是列表?

列表就像 一个可以无限扩展的集装箱,可以存放各种类型的数据,并且可以随时添加、删除或修改里面的内容。

# 创建一个列表
scores = [96, 86, 90, 87, 78, 97];
names = ["张三", "李四", "王五"];
mixed = [1, "hello", 3.14, True];

3.2 列表的创建方式

列表可以用多种方式创建:

# 直接创建。
numbers = [1, 2, 3, 4, 5];
​
# 使用list()函数。
chars = list("hello")  # ['h', 'e', 'l', 'l', 'o'];# 使用range()创建数字序列.
numbers = list(range(1, 6))  # [1, 2, 3, 4, 5];# 创建空列表。
empty_list = [];
empty_list2 = list();

3.3 列表的基本操作

3.3.1 访问列表元素

列表中的元素有固定的位置(索引),从0开始:

fruits = ["苹果", "香蕉", "橙子", "葡萄"]
​
print(fruits[0])   # 苹果 - 第一个元素
print(fruits[1])   # 香蕉 - 第二个元素
print(fruits[-1])  # 葡萄 - 最后一个元素
print(fruits[-2])  # 橙子 - 倒数第二个元素

3.3.2 列表切片

获取列表的一部分:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
​
print(numbers[2:5])   # [2, 3, 4] - 从索引2到4
print(numbers[:3])    # [0, 1, 2] - 从开头到索引2
print(numbers[7:])    # [7, 8, 9] - 从索引7到结尾
print(numbers[::2])   # [0, 2, 4, 6, 8] - 每隔一个取一个
print(numbers[::-1])  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] - 反转列表

3.3.3 修改列表元素

列表是可变的,可以直接修改元素:

fruits = ["苹果", "香蕉", "橙子"]
fruits[1] = "葡萄"  # 修改第二个元素
print(fruits)  # ['苹果', '葡萄', '橙子']

3.3.4 列表长度

使用 len() 函数获取列表长度

fruits = ["苹果", "香蕉", "橙子"]
print(len(fruits))  # 3

3.3.5 检查元素是否存在

使用 in 关键字检查元素是否在列表中:

fruits = ["苹果", "香蕉", "橙子"]
print("苹果" in fruits)  # True
print("葡萄" in fruits)  # False

3.4 列表的常用方法

3.4.1 添加元素

fruits = ["苹果", "香蕉"]
​
# append() - 在末尾添加元素
fruits.append("橙子")
print(fruits)  # ['苹果', '香蕉', '橙子']# insert() - 在指定位置插入元素
fruits.insert(1, "葡萄")
print(fruits)  # ['苹果', '葡萄', '香蕉', '橙子']# extend() - 合并另一个列表
more_fruits = ["西瓜", "芒果"]
fruits.extend(more_fruits) # fruits列表和more_fruits列表合并。
print(fruits)  # ['苹果', '葡萄', '香蕉', '橙子', '西瓜', '芒果']

3.4.2 删除元素

numbers = [1, 2, 3, 4, 2, 5];
​
# remove() - 删除指定值的第一个匹配项。
numbers.remove(2);
print(numbers);  # [1, 3, 4, 2, 5]。# pop() - 删除并返回指定位置的元素。
removed = numbers.pop(1);
print(removed);  # 3。
print(numbers);  # [1, 4, 2, 5]。# del - 通过索引或切片删除。
del numbers[0];
print(numbers);  # [4, 2, 5]。del numbers[1:];  # 删除从索引1到结尾的所有元素。
print(numbers);  # [4]。# clear() - 清空列表。
numbers.clear();
print(numbers);  # []。

3.4.3 查找元素

fruits = ["苹果", "香蕉", "橙子", "香蕉"]
​
# index() - 返回元素的索引位置
print(fruits.index("香蕉"))  # 1 - 第一个"香蕉"的位置
print(fruits.index("香蕉", 2))  # 3 - 从索引2开始找# count() - 统计元素出现的次数
print(fruits.count("香蕉"))  # 2
print(fruits.count("葡萄"))  # 0

3.4.4 排序和反转

numbers = [3, 1, 4, 1, 5, 9, 2];
​
# sort() - 原地排序(修改原列表)
numbers.sort();
print(numbers);  # [1, 1, 2, 3, 4, 5, 9]
​
numbers.sort(reverse=True);  # 降序排序
print(numbers);  # [9, 5, 4, 3, 2, 1, 1]# sorted() - 返回新列表,不修改原列表
numbers = [3, 1, 4, 1, 5, 9, 2];
new_numbers = sorted(numbers);
print(new_numbers);  # [1, 1, 2, 3, 4, 5, 9]
print(numbers);      # [3, 1, 4, 1, 5, 9, 2] - 原列表不变# reverse() - 反转列表
fruits = ["苹果", "香蕉", "橙子"];
fruits.reverse();
print(fruits);  # ['橙子', '香蕉', '苹果']

3.4.5 复制列表

original = [1, 2, 3]
​
# 错误的方式 - 这只是创建了引用
wrong_copy = original
wrong_copy[0] = 100
print(original)  # [100, 2, 3] - 原列表也被修改了!# 正确的方式
original = [1, 2, 3]
correct_copy = original.copy()  # 或者 correct_copy = original[:]
correct_copy[0] = 100
print(original)     # [1, 2, 3] - 原列表不变
print(correct_copy) # [100, 2, 3]

3.5 列表的遍历

3.5.1 使用for循环遍历( 详见第7章)

fruits = ["苹果", "香蕉", "橙子"]

# 直接遍历元素
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

# 遍历索引和元素
for i, fruit in enumerate(fruits):
    print(f"第{i}个水果是:{fruit}")

运行结果:

我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橙子
第0个水果是:苹果 
第1个水果是:香蕉
第2个水果是:橙子

3.5.2 使用while循环遍历( 详见第7章)

fruits = ["苹果", "香蕉", "橙子"]
i = 0
while i < len(fruits):
    print(fruits[i])
    i += 1

3.6 列表推导式

列表推导式是一种快速创建列表的方法:

# 创建1-10的平方列表
squares = [x**2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 带条件的列表推导式
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

# 对现有列表进行处理
fruits = ["  apple  ", "BANANA", "Orange"]
cleaned_fruits = [fruit.strip().lower() for fruit in fruits]
print(cleaned_fruits)  # ['apple', 'banana', 'orange']

3.7 嵌套列表

列表中可以包含其他列表,形成多维列表:

# 二维列表(矩阵)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
​
# 访问二维列表中的元素
print(matrix[0][0])  # 1 - 第一行第一列
print(matrix[1][2])  # 6 - 第二行第三列# 遍历二维列表
for row in matrix:
    for num in row:
        print(num, end=" ")
    print()  # 换行
# 输出:
# 1 2 3
# 4 5 6
# 7 8 9

3.8 列表的其他操作

3.8.1 列表拼接

list1 = [1, 2, 3]
list2 = [4, 5, 6]
​
# 使用 + 号拼接
combined = list1 + list2
print(combined)  # [1, 2, 3, 4, 5, 6]# 使用 * 号重复
repeated = list1 * 3
print(repeated)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]

3.8.2 列表比较

list1 = [1, 2, 3];
list2 = [1, 2, 3];
list3 = [1, 2, 4];

print(list1 == list2);  # True —— 元素相同。
print(list1 == list3);  # False —— 元素不同。
print(list1 < list3);   # True —— 逐个元素比较。

3.9 列表与字符串的转换

# 字符串转列表。
text = "hello world";
chars = list(text);
print(chars);  # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']。

words = text.split()  # 按空格分割
print(words)  # ['hello', 'world']

# 列表转字符串
fruits = ["苹果", "香蕉", "橙子"]
text1 = " ".join(fruits)
print(text1)  # "苹果 香蕉 橙子"

text2 = "、".join(fruits)
print(text2)  # "苹果、香蕉、橙子"

3.10 列表的应用场景

列表在编程中有广泛的应用:

# 1. 存储学生信息
students = ["张三", "李四", "王五"]
​
# 2. 记录考试成绩
scores = [85, 92, 78, 96, 88]
​
# 3. 管理待办事项
todo_list = ["写作业", "买菜", "洗衣服"]
​
# 4. 游戏中的角色列表
characters = ["战士", "法师", "射手"]
​
# 5. 数据分析中的数据集
data = [23, 45, 67, 89, 12, 34, 56]

本章笔记:

  • 列表是一个可变的有序容器,可以存储多个元素。
  • 列表支持索引和切片操作,可以方便地访问和修改元素。
  • 列表有很多实用的方法,如添加、删除、查找、排序等。
  • 列表推导式是创建列表的简洁方式。
  • 列表可以嵌套,形成多维数据结构。
  • 列表是可变的,需要注意浅拷贝和深拷贝的问题。
  • 列表与字符串可以相互转换。
  • 列表在编程中有广泛的应用,是Python中最常用的数据结构之一。