0
点赞
收藏
分享

微信扫一扫

Python3 列表(List)完全指南:从基础到高级用法

列表(List)是 Python 中最常用、最灵活的数据结构之一,它可以存储任意类型的元素,并且支持动态修改。本文将全面介绍 Python 列表的创建、操作、方法和高级用法,配有丰富的代码示例。

一、列表基础

1. 创建列表

python# 空列表
 empty_list = []
 empty_list2 = list()
  
 # 包含元素的列表
 numbers = [1, 2, 3, 4, 5]
 fruits = ['apple', 'banana', 'orange']
 mixed = [1, 'hello', 3.14, True]
  
 # 多维列表(列表的列表)
 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

2. 访问列表元素

pythonfruits = ['apple', 'banana', 'orange', 'grape']
  
 # 通过索引访问(从0开始)
 print(fruits[0])  # 输出: apple
 print(fruits[2])  # 输出: orange
  
 # 负索引表示从末尾开始
 print(fruits[-1])  # 输出: grape
 print(fruits[-2])  # 输出: orange
  
 # 切片操作 [start:end:step]
 print(fruits[1:3])    # 输出: ['banana', 'orange']
 print(fruits[:2])     # 输出: ['apple', 'banana']
 print(fruits[2:])     # 输出: ['orange', 'grape']
 print(fruits[::2])    # 输出: ['apple', 'orange']
 print(fruits[::-1])   # 输出: ['grape', 'orange', 'banana', 'apple'] (反转列表)

二、列表操作

1. 修改列表

pythonnumbers = [1, 2, 3, 4, 5]
  
 # 修改单个元素
 numbers[1] = 20
 print(numbers)  # [1, 20, 3, 4, 5]
  
 # 修改多个元素(切片赋值)
 numbers[1:4] = [22, 33, 44]
 print(numbers)  # [1, 22, 33, 44, 5]
  
 # 替换的元素数量可以不同
 numbers[1:4] = [99, 88]
 print(numbers)  # [1, 99, 88, 5]

2. 添加元素

pythonfruits = ['apple', 'banana']
  
 # append() - 在末尾添加单个元素
 fruits.append('orange')
 print(fruits)  # ['apple', 'banana', 'orange']
  
 # insert() - 在指定位置插入元素
 fruits.insert(1, 'grape')
 print(fruits)  # ['apple', 'grape', 'banana', 'orange']
  
 # extend() - 合并列表(相当于 +=)
 more_fruits = ['pear', 'peach']
 fruits.extend(more_fruits)
 print(fruits)  # ['apple', 'grape', 'banana', 'orange', 'pear', 'peach']
  
 # + 运算符也可以合并列表
 new_fruits = fruits + ['melon', 'kiwi']
 print(new_fruits)

3. 删除元素

pythonnumbers = [1, 2, 3, 4, 5]
  
 # del 语句 - 按索引删除
 del numbers[1]
 print(numbers)  # [1, 3, 4, 5]
  
 # pop() - 删除并返回指定位置的元素(默认最后一个)
 removed = numbers.pop()
 print(removed)  # 5
 print(numbers)  # [1, 3, 4]
  
 removed = numbers.pop(0)
 print(removed)  # 1
 print(numbers)  # [3, 4]
  
 # remove() - 按值删除(删除第一个匹配项)
 letters = ['a', 'b', 'c', 'a']
 letters.remove('a')
 print(letters)  # ['b', 'c', 'a']
  
 # clear() - 清空列表
 letters.clear()
 print(letters)  # []

三、列表方法

1. 常用方法

pythonnums = [3, 1, 4, 1, 5, 9, 2]
  
 # count() - 统计元素出现次数
 print(nums.count(1))  # 2
  
 # index() - 返回元素第一次出现的索引
 print(nums.index(5))  # 4
  
 # reverse() - 反转列表(原地修改)
 nums.reverse()
 print(nums)  # [2, 9, 5, 1, 4, 1, 3]
  
 # sort() - 排序(原地修改)
 nums.sort()
 print(nums)  # [1, 1, 2, 3, 4, 5, 9]
  
 # sorted() - 返回排序后的新列表(不修改原列表)
 nums = [3, 1, 4, 1, 5, 9, 2]
 sorted_nums = sorted(nums)
 print(nums)      # [3, 1, 4, 1, 5, 9, 2] (未修改)
 print(sorted_nums)  # [1, 1, 2, 3, 4, 5, 9]

2. 排序进阶

python# 自定义排序
 students = [
     {'name': 'Alice', 'score': 85},
     {'name': 'Bob', 'score': 92},
     {'name': 'Charlie', 'score': 78}
 ]
  
 # 按分数升序排序
 students.sort(key=lambda x: x['score'])
 print(students)
  
 # 按分数降序排序
 students.sort(key=lambda x: x['score'], reverse=True)
 print(students)
  
 # 使用 cmp 参数(Python3 中需要 functools.cmp_to_key)
 from functools import cmp_to_key
  
 def compare(a, b):
     if a['score'] < b['score']:
         return -1
     elif a['score'] > b['score']:
         return 1
     else:
         return 0
  
 students.sort(key=cmp_to_key(compare))
 print(students)

四、列表推导式

列表推导式是 Python 中创建列表的简洁方式。

1. 基本列表推导式

python# 创建0-9的平方列表
 squares = [x**2 for x in range(10)]
 print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  
 # 带条件的列表推导式
 even_squares = [x**2 for x in range(10) if x % 2 == 0]
 print(even_squares)  # [0, 4, 16, 36, 64]

2. 嵌套列表推导式

python# 创建乘法表
 matrix = [[i*j for j in range(1, 6)] for i in range(1, 6)]
 for row in matrix:
     print(row)
 # 输出:
 # [1, 2, 3, 4, 5]
 # [2, 4, 6, 8, 10]
 # [3, 6, 9, 12, 15]
 # [4, 8, 12, 16, 20]
 # [5, 10, 15, 20, 25]
  
 # 展平二维列表
 flat = [num for row in matrix for num in row]
 print(flat)  # [1, 2, 3, 4, 5, 2, 4, 6, 8, 10, ...]

五、列表高级操作

1. 列表复制

pythonoriginal = [1, 2, [3, 4]]
  
 # 浅拷贝(shallow copy)
 shallow_copy = original.copy()  # 或 original[:] 或 list(original)
 shallow_copy[0] = 10
 shallow_copy[2][0] = 30
 print(original)  # [1, 2, [30, 4]] (嵌套列表被修改)
  
 # 深拷贝(deep copy)
 import copy
 deep_copy = copy.deepcopy(original)
 deep_copy[2][0] = 300
 print(original)  # [1, 2, [30, 4]] (不受影响)

2. 列表与迭代

python# enumerate() - 获取索引和值
 fruits = ['apple', 'banana', 'orange']
 for index, fruit in enumerate(fruits):
     print(f"{index}: {fruit}")
  
 # zip() - 合并多个列表
 names = ['Alice', 'Bob', 'Charlie']
 ages = [25, 30, 35]
 for name, age in zip(names, ages):
     print(f"{name} is {age} years old")
  
 # filter() - 过滤列表
 numbers = [1, 2, 3, 4, 5, 6]
 even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
 print(even_numbers)  # [2, 4, 6]
  
 # map() - 应用函数到每个元素
 squared = list(map(lambda x: x**2, numbers))
 print(squared)  # [1, 4, 9, 16, 25, 36]

3. 列表与解包

python# 解包列表
 first, *middle, last = [1, 2, 3, 4, 5]
 print(first)  # 1
 print(middle)  # [2, 3, 4]
 print(last)   # 5
  
 # 交换变量
 a, b = 1, 2
 a, b = b, a
 print(a, b)  # 2 1
  
 # 合并列表
 list1 = [1, 2, 3]
 list2 = ['a', 'b', 'c']
 combined = [*list1, *list2]
 print(combined)  # [1, 2, 3, 'a', 'b', 'c']

六、实际应用示例

1. 数据处理示例

python# 计算学生平均分
 students = [
     {'name': 'Alice', 'scores': [85, 90, 78]},
     {'name': 'Bob', 'scores': [92, 88, 91]},
     {'name': 'Charlie', 'scores': [78, 82, 85]}
 ]
  
 # 计算每个学生的平均分
 for student in students:
     avg = sum(student['scores']) / len(student['scores'])
     student['average'] = avg
  
 print(students)
 # 输出:
 # [
 #     {'name': 'Alice', 'scores': [85, 90, 78], 'average': 84.333...},
 #     {'name': 'Bob', 'scores': [92, 88, 91], 'average': 90.333...},
 #     {'name': 'Charlie', 'scores': [78, 82, 85], 'average': 81.666...}
 # ]

2. 矩阵操作示例

python# 矩阵转置
 matrix = [
     [1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]
 ]
  
 transposed = [[row[i] for row in matrix] for i in range(3)]
 print(transposed)
 # 输出:
 # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  
 # 或者使用 zip()
 transposed_zip = list(zip(*matrix))
 print(transposed_zip)  # [(1, 4, 7), (2, 5, 8), (3, 6, 9)] (元组形式)

3. 扁平化嵌套列表

pythondef flatten(nested_list):
     flat_list = []
     for item in nested_list:
         if isinstance(item, list):
             flat_list.extend(flatten(item))
         else:
             flat_list.append(item)
     return flat_list
  
 nested = [1, [2, [3, 4], 5], 6]
 print(flatten(nested))  # [1, 2, 3, 4, 5, 6]

七、性能考虑

1. 列表操作的时间复杂度

  • 访问元素:O(1)
  • 修改元素:O(1)
  • 尾部添加:O(1)(平均)
  • 头部添加/删除:O(n)
  • 切片操作:O(k)(k是切片长度)
  • 排序:O(n log n)
  • 包含检查:O(n)

2. 何时使用列表

  • 需要有序集合
  • 需要频繁访问或修改元素
  • 需要动态调整大小
  • 不需要频繁的包含检查(如果需要快速查找,考虑使用集合或字典)

八、总结

列表是 Python 中最强大和常用的数据结构之一,掌握它的各种操作和技巧可以大大提高你的编程效率。本文涵盖了:

  1. 列表的创建和基本访问
  2. 添加、修改和删除元素的方法
  3. 常用的列表方法(sort, reverse, count等)
  4. 列表推导式的高级用法
  5. 列表的复制、解包和迭代
  6. 实际应用中的数据处理示例
  7. 性能考虑和最佳实践

通过不断练习这些概念,你将能够更高效地使用列表来解决各种编程问题。记住,列表是可变的,这意味着对列表的修改会影响所有引用该列表的变量,这在需要独立副本时需要注意使用深拷贝或浅拷贝。

举报

相关推荐

0 条评论