Python 列表:基础知识与应用场景

1. 列表(List)的概念

列表是 Python 中最常用的数据结构之一,用于存储一组有序的元素。可以存储不同类型的数据,甚至可以存储其他列表(嵌套列表)。列表是可变类型,可以随时修改、添加或删除元素。

2. 创建列表

  • 空列表:

    empty_list = []
    
  • 包含元素的列表:

    fruits = ['apple', 'banana', 'cherry']
    numbers = [1, 2, 3, 4, 5]
    mixed_list = [1, 'apple', 3.14, [1, 2, 3]]
    
  • 通过 list() 函数创建:

    my_list = list('hello')
    print(my_list)  # ['h', 'e', 'l', 'l', 'o']
    

3. 访问列表元素

  • 通过索引访问:

    first_fruit = fruits[0]  # 'apple'
    last_fruit = fruits[-1]  # 'cherry'
    
  • 通过切片访问:

    sublist = fruits[1:3]  # ['banana', 'cherry']
    

4. 修改列表

  • 添加元素:

    • append():在列表末尾添加单个元素。
      fruits.append('orange')
      print(fruits)  # ['apple', 'banana', 'cherry', 'orange']
      
    • extend():将一个可迭代对象的所有元素添加到列表末尾。
      fruits.extend(['mango', 'grapes'])
      print(fruits)  # ['apple', 'banana', 'cherry', 'orange', 'mango', 'grapes']
      
    • insert():在指定位置插入元素。
      fruits.insert(1, 'kiwi')  # 在索引1的位置插入 'kiwi'
      print(fruits)  # ['apple', 'kiwi', 'banana', 'cherry', 'orange', 'mango', 'grapes']
      
  • 删除元素:

    • remove():删除列表中第一个匹配的元素。
      fruits.remove('banana')
      print(fruits)  # ['apple', 'kiwi', 'cherry', 'orange', 'mango', 'grapes']
      
    • pop():删除并返回指定位置的元素。如果不指定索引,默认删除并返回最后一个元素。
      popped_fruit = fruits.pop()
      print(fruits)  # ['apple', 'kiwi', 'banana', 'cherry']
      print(popped_fruit)  # 'grapes'
      
    • clear():清空列表。
      fruits.clear()
      print(fruits)  # []
      

5. 列表常用方法

  • count():统计指定元素出现的次数。

    fruits = ['apple', 'banana', 'cherry', 'banana']
    print(fruits.count('banana'))  # 2
    
  • index():返回指定元素首次出现的位置。

    print(fruits.index('cherry'))  # 2
    
  • sort():对列表进行排序。

    fruits = ['banana', 'apple', 'cherry']
    fruits.sort()
    print(fruits)  # ['apple', 'banana', 'cherry']
    
  • reverse():反转列表。

    fruits.reverse()
    print(fruits)  # ['cherry', 'banana', 'apple']
    
  • copy():返回列表的浅拷贝。

    new_fruits = fruits.copy()
    

6. 列表推导式(List Comprehension)

列表推导式允许从一个已有的列表创建另一个列表,通常用于过滤和变换。

  • 基础用法:

    squares = [x**2 for x in range(5)]
    print(squares)  # [0, 1, 4, 9, 16]
    
  • 带条件的列表推导式:

    even_squares = [x**2 for x in range(10) if x % 2 == 0]
    print(even_squares)  # [0, 4, 16, 36, 64]
    

7. 嵌套列表

  • 创建嵌套列表:

    nested_list = [[1, 2], [3, 4], [5, 6]]
    
  • 访问嵌套列表中的元素:

    print(nested_list[1][0])  # 3
    

8. 列表的应用场景

  • 数据存储与处理: 用于存储和处理需要按顺序存储的数据(如学生成绩、商品列表等)。

    scores = [75, 80, 95, 90]
    average_score = sum(scores) / len(scores)
    
  • 迭代与过滤: 在很多应用中,列表会用于存储并迭代遍历数据,例如用列表推导式对数据进行筛选或变换。

    # 获取所有偶数
    numbers = [1, 2, 3, 4, 5, 6]
    even_numbers = [x for x in numbers if x % 2 == 0]
    
  • 处理变长数据: 列表用于存储变长的数据,尤其适合需要频繁插入或删除操作的场景。

9. 常见的易错点与优化

  • 列表切片时索引越界:

    # 错误的写法
    fruits = ['apple', 'banana', 'cherry']
    print(fruits[5])  # IndexError: list index out of range
    

    解决方法:
    在访问索引时,确保索引不会越界,或使用异常处理。

  • 对列表进行排序时,可能影响原列表:

    fruits = ['banana', 'apple', 'cherry']
    fruits.sort()  # 排序会改变原列表
    print(fruits)  # ['apple', 'banana', 'cherry']
    

    解决方法:
    使用 sorted() 函数可以返回排序后的新列表,不会改变原列表。

    sorted_fruits = sorted(fruits)
    
  • 浅拷贝与深拷贝:

    list1 = [[1, 2], [3, 4]]
    list2 = list1.copy()  # 浅拷贝
    list2[0][0] = 10
    print(list1)  # [[10, 2], [3, 4]],因为是浅拷贝,内部列表引用相同
    

    解决方法:
    对于嵌套列表,使用 copy.deepcopy() 来创建深拷贝。

    import copy
    list2 = copy.deepcopy(list1)