Python - 操作列表

四、操作列表

4.1 遍历整个列表
  • 遍历
    1
    2
    3
    4
    mangicians = ['alice', 'david', 'carolina']

    for mangician in mangicians:
    print(mangician)
4.2 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系

  • 缩进
    • 忘记缩进
      • 报错
      • 逻辑错误
    • 不必要的缩进
      • 报错
    • 循环后不必要的缩进
      • 逻辑错误
    • 遗漏了冒号
      • 语法错误
      • for语句末尾的冒号告诉Python下一行是循环的第一行
4.3 创建数值列表
  • 使用函数range()

    • 从指定的第一个值开始,到指定的第二个值结束,不包含第二个值
      1
      2
      for value in range(1, 5):
      print(value)
  • 使用range()创建数字列表——使用list()转换为列表

    • 使用list()转换为列表

      1
      2
      numbers = list(range(1, 5))
      print(numbers)

      输出:

      [1, 2, 3, 4]

    • 指定步长

      • 打印1~10内的偶数:
        1
        2
        numbers = list(range(2, 11, 2))
        print(numbers)
    • 练习

      • 打印1~10内的平方

        1
        2
        3
        4
        5
        squares = []
        for value in range(1, 11):
        square = value ** 2
        squares.append(square)
        print(squares)
      • 优化

        • 使用临时变量会让代码更易读,而在其他情况下,只会让代码无谓地变长;
        • 首先考虑编写清晰易懂且能完成所需功能的代码;
        • 审核时,再考虑更高效的方法。
          1
          2
          3
          4
          squares = []
          for value in range(1, 11):
          squares.append(value ** 2)
          print(squares)
  • 统计计算

    • 最大值max()、最小值min()、总和sum()
      1
      2
      3
      4
      digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
      print(max(digits))
      print(min(digits))
      print(sum(digits))
  • 列表解析

    • 解析列表将for循环和创建新元素的代码合并成一行,并自动附加新元素
      1
      2
      3
      4
      5
      """
      列表解析
      """
      squares = [value ** 2 for value in range(1, 11)]
      print(squares)
4.4 使用列表的一部分
  • 切片

    • 处理列表的部分元素

      1
      2
      3
      4
      5
      6
      """
      打印从第1个开始,到第4个为止,不包括第4个(下标从0开始)
      """
      players = ['charles', 'martina', 'michael', 'florence', 'eli']

      print(players[0:3])
    • 如果没有指定第一个索引,将从列表开头开始

      1
      2
      3
      4
      5
      players = ['charles', 'martina', 'michael', 'florence', 'eli']
      """
      打印从列表开头开始,到第5个为止,不包括第5个(下标从0开始)
      """
      print(players[:4])
    • 如果省略终止索引,将终止于列表末尾

      1
      2
      3
      4
      5
      players = ['charles', 'martina', 'michael', 'florence', 'eli']
      """
      打印从第2个开始,到列表末尾为止
      """
      print(players[1:])
    • 负数索引返回离列末尾相应距离的元素

      1
      2
      3
      4
      5
      players = ['charles', 'martina', 'michael', 'florence', 'eli']
      """
      打印从最后3个开始,到列表末尾为止
      """
      print(players[-3:])
  • 遍历切片

    1
    2
    3
    4
    players = ['charles', 'martina', 'michael', 'florence', 'eli']

    for player in players[:3]:
    print(player.title())
  • 复制列表

    • 复制列表,可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:]

理解两个例子的差异

1
2
3
4
5
6
7
8
9
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]

my_foods.append('cannoli')
friend_foods.append('ice cream')

print(my_foods)

print(friend_foods)

输出:

1
2
3
4
5
6
7
8
9
10
11
12
my_foods = ['pizza', 'falafel', 'carrot cake']
"""
本质上是将friend_foods关联到了包含在my_foods的列表,两个变量都是指向了同一个表。所以分别对两个变量操作,列表都会发生变化,且两个变量的值是相同的
"""
friend_foods = my_foods

my_foods.append('cannoli')
friend_foods.append('ice cream')

print(my_foods)

print(friend_foods)

输出:

4.5 元组

一系列不可修改的元素,不可变的列表被称为元组

  • 定义和遍历

    • 尝试修改元组会报错
      1
      2
      3
      4
      5
      dimensions = (200, 50)
      print(dimensions)

      for dimension in dimensions:
      print(dimension)
  • 修改元组变量

    • 虽然不能修改元组的元素,但可以给存储元组的变量赋值(重新定义元组)
      1
      2
      3
      4
      5
      dimensions = (200, 50)

      dimensions = (400, 100)
      for dimension in dimensions:
      print(dimension)

如果需要存储一组值在程序的整个生命周期内都不变,可以使用元组。