跳到主要内容

Python 列表

什么是Python列表?

列表是Python中最常用、最灵活的数据结构之一,用于存储有序的元素集合。与其他编程语言中的数组类似,Python列表可以存储不同类型的数据(整数、字符串、对象甚至其他列表),并且大小可以动态调整。

列表在方括号[]内定义,元素之间用逗号分隔。作为Python的核心数据类型之一,掌握列表的操作对于编程至关重要。

为什么学习列表很重要?

列表是Python中最基础的数据结构之一,理解列表将帮助你解决各种编程问题,包括数据处理、应用程序开发等多个方面。

创建列表

基本语法

python
# 创建一个空列表
empty_list = []

# 创建包含元素的列表
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", 3.14, True]

# 使用list()函数创建列表
another_list = list("Python") # 将字符串转换为字符列表

输出结果:

[]
[1, 2, 3, 4, 5]
['apple', 'banana', 'cherry']
[1, 'hello', 3.14, True]
['P', 'y', 't', 'h', 'o', 'n']

列表推导式

列表推导式提供了一种简洁的方式来创建列表:

python
# 创建1到10的平方列表
squares = [x**2 for x in range(1, 11)]
print(squares)

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

输出结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[4, 16, 36, 64, 100]

访问列表元素

索引

Python列表使用从0开始的索引来访问元素:

python
fruits = ["apple", "banana", "cherry", "orange", "kiwi"]

# 访问单个元素
print(fruits[0]) # 第一个元素
print(fruits[2]) # 第三个元素

# 负索引从列表末尾开始计数
print(fruits[-1]) # 最后一个元素
print(fruits[-3]) # 倒数第三个元素

输出结果:

apple
cherry
kiwi
cherry

切片

切片操作允许我们访问列表的一部分:

python
fruits = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]

# 语法: list[start:end:step]
print(fruits[2:5]) # 第3个到第5个元素
print(fruits[:3]) # 开始到第3个元素
print(fruits[3:]) # 第4个到结尾
print(fruits[-4:-1]) # 倒数第4个到倒数第2个
print(fruits[::2]) # 每隔一个元素选取
print(fruits[::-1]) # 反转列表

输出结果:

['cherry', 'orange', 'kiwi']
['apple', 'banana', 'cherry']
['orange', 'kiwi', 'melon', 'mango']
['orange', 'kiwi', 'melon']
['apple', 'cherry', 'kiwi', 'mango']
['mango', 'melon', 'kiwi', 'orange', 'cherry', 'banana', 'apple']

修改列表

更改元素

python
fruits = ["apple", "banana", "cherry"]

# 修改单个元素
fruits[1] = "blackcurrant"
print(fruits)

# 使用切片修改多个元素
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30, 40]
print(numbers)

# 替换为更少的元素
letters = ['a', 'b', 'c', 'd', 'e']
letters[1:4] = ['B']
print(letters)

输出结果:

['apple', 'blackcurrant', 'cherry']
[1, 20, 30, 40, 5]
['a', 'B', 'e']

添加元素

python
fruits = ["apple", "banana", "cherry"]

# 在末尾添加元素
fruits.append("orange")
print(fruits)

# 在指定位置插入元素
fruits.insert(1, "blueberry")
print(fruits)

# 合并列表
more_fruits = ["mango", "pineapple"]
fruits.extend(more_fruits)
print(fruits)

# 使用+运算符合并列表
combined = fruits + ["papaya"]
print(combined)

输出结果:

['apple', 'banana', 'cherry', 'orange']
['apple', 'blueberry', 'banana', 'cherry', 'orange']
['apple', 'blueberry', 'banana', 'cherry', 'orange', 'mango', 'pineapple']
['apple', 'blueberry', 'banana', 'cherry', 'orange', 'mango', 'pineapple', 'papaya']

删除元素

python
fruits = ["apple", "banana", "cherry", "orange", "kiwi"]

# 使用del语句删除元素
del fruits[1]
print(fruits)

# 使用pop()方法删除并返回元素
removed = fruits.pop(2) # 删除第3个元素
print(f"Removed: {removed}")
print(fruits)

# pop()不带参数时删除最后一个元素
last = fruits.pop()
print(f"Last: {last}")
print(fruits)

# 使用remove()方法删除指定值的元素
fruits.remove("apple")
print(fruits)

# 清空列表
fruits.clear()
print(fruits)

输出结果:

['apple', 'cherry', 'orange', 'kiwi']
Removed: orange
['apple', 'cherry', 'kiwi']
Last: kiwi
['apple', 'cherry']
['cherry']
[]

列表操作和方法

常用方法

python
fruits = ["apple", "banana", "cherry", "apple", "kiwi"]

# 计算元素出现的次数
print(fruits.count("apple"))

# 查找元素第一次出现的索引
print(fruits.index("banana"))

# 排序列表
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers)

# 降序排序
numbers.sort(reverse=True)
print(numbers)

# 反转列表
fruits.reverse()
print(fruits)

# 复制列表
copy_of_fruits = fruits.copy()
print(copy_of_fruits)

输出结果:

2
1
[1, 1, 2, 3, 4, 5, 9]
[9, 5, 4, 3, 2, 1, 1]
['kiwi', 'apple', 'cherry', 'banana', 'apple']
['kiwi', 'apple', 'cherry', 'banana', 'apple']

其他操作

python
# 列表长度
fruits = ["apple", "banana", "cherry"]
print(len(fruits))

# 检查元素是否存在
print("banana" in fruits)
print("mango" not in fruits)

# 遍历列表
for fruit in fruits:
print(f"I like {fruit}")

输出结果:

3
True
True
I like apple
I like banana
I like cherry

嵌套列表

列表可以包含其他列表,创建多维数据结构:

python
# 创建二维列表
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

# 访问嵌套元素
print(matrix[1][2]) # 访问第二行第三列的元素

# 遍历嵌套列表
for row in matrix:
for num in row:
print(num, end=" ")
print()

输出结果:

6
1 2 3
4 5 6
7 8 9

实际应用案例

案例1:学生成绩分析

python
# 学生成绩列表
scores = [85, 92, 78, 65, 98, 89, 75, 83, 90, 76]

# 计算平均分
average = sum(scores) / len(scores)
print(f"平均分: {average:.2f}")

# 找出最高分和最低分
max_score = max(scores)
min_score = min(scores)
print(f"最高分: {max_score}")
print(f"最低分: {min_score}")

# 统计90分以上的人数
above_90 = [score for score in scores if score >= 90]
print(f"90分以上的人数: {len(above_90)}")

# 按成绩排序
scores.sort(reverse=True)
print(f"成绩排名: {scores}")

输出结果:

平均分: 83.10
最高分: 98
最低分: 65
90分以上的人数: 3
成绩排名: [98, 92, 90, 89, 85, 83, 78, 76, 75, 65]

案例2:购物车功能

python
# 初始化购物车
cart = []

# 添加商品到购物车
def add_item(item, price):
cart.append({"item": item, "price": price})
print(f"{item}已添加到购物车")

# 从购物车中移除商品
def remove_item(item):
for i, product in enumerate(cart):
if product["item"] == item:
removed = cart.pop(i)
print(f"{removed['item']}已从购物车移除")
return
print(f"购物车中没有{item}")

# 计算购物车总价
def calculate_total():
total = sum(product["price"] for product in cart)
return total

# 显示购物车内容
def show_cart():
if not cart:
print("购物车为空")
else:
print("购物车商品:")
for i, product in enumerate(cart, 1):
print(f"{i}. {product['item']}: ¥{product['price']:.2f}")
print(f"总计: ¥{calculate_total():.2f}")

# 使用示例
add_item("笔记本电脑", 5999)
add_item("手机", 3299)
add_item("耳机", 799)
show_cart()
remove_item("手机")
show_cart()

输出结果:

笔记本电脑已添加到购物车
手机已添加到购物车
耳机已添加到购物车
购物车商品:
1. 笔记本电脑: ¥5999.00
2. 手机: ¥3299.00
3. 耳机: ¥799.00
总计: ¥10097.00
手机已从购物车移除
购物车商品:
1. 笔记本电脑: ¥5999.00
2. 耳机: ¥799.00
总计: ¥6798.00

列表的性能考虑

Python列表是动态数组的实现,了解其性能特点有助于编写高效代码:

*注:虽然单个追加操作是O(1),但由于动态调整大小,偶尔会有O(n)的操作。

注意

当列表非常大或需要频繁插入/删除元素时,考虑使用其他数据结构如collections.deque可能会更高效。

总结

Python列表是一种功能强大且灵活的数据结构,提供了多种方法来存储、访问和操作数据:

  1. 创建列表:使用方括号[]list()函数
  2. 访问元素:使用索引或切片
  3. 修改列表:更新、添加、删除元素
  4. 列表方法:提供了丰富的操作如append()sort()pop()
  5. 嵌套列表:支持多维数据结构

列表在Python编程中无处不在,从简单的数据收集到复杂的数据处理,熟练掌握列表操作将显著提升你的编程能力。

练习题

  1. 创建一个包含5个不同水果名称的列表,然后添加两个水果,并按字母表顺序排序。
  2. 编写一个函数,接收一个数字列表,返回所有偶数的平方组成的新列表。
  3. 创建一个嵌套列表表示3x3的井字棋盘,并设置中心位置为"X"。
  4. 编写代码统计一个字符串中每个字符出现的次数,结果存储在列表中。
  5. 实现一个简单的待办事项列表,支持添加任务、标记完成和查看所有任务。

附加资源

掌握列表操作是通往Python精通之路的重要一步。通过实践这些概念,你将能够更有效地解决各种编程问题!