Python 操作列表

443 阅读6分钟

如何遍历整个列表?循环让你能够对列表的每个元素都采取一个或一系列相同的措施,从而高效地处理任何长度的列表,包括包含数千乃至数百万个元素的列表。

遍历整个列表

  • 需要对列表中的每个元素都执行相同的操作时,可使用 Python 中的 for 循环。
  • 下面使用 for 循环来打印魔术师名单中的所有名字:
magicians = ['alice', 'david', 'carolina']

for magician in magicians:
    print(magician)

深入研究循环

在 for 循环中执行更多操作

  • for 循环中,可对每个元素执行任何操作。
magicians = ['alice', 'david', 'carolina']

for magician in magicians:
    print(f"{magician.title()}, that was a great trick!")
  • 下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表演:
magicians = ['alice', 'david', 'carolina']

for magician in magicians:
    print(f"{magician.title()}, that was a great trick!")
    print(f"I can't wait to see your next trick, {magician.title()}.\n")

在 for 循环结束后执行一些操作

magicians = ['alice', 'david', 'carolina']

for magician in magicians:
    print(f"{magician.title()}, that was a great trick!")
    print(f"I can't wait to see your next trick, {magician.title()}.\n")

print("Thank you, everyone. That was a great magic show!")

避免缩进错误

  • 来看一些常见的缩进错误

忘记缩进

  • 对于位于 for 语句后面且属于循环组成部分的代码行,一定要缩进。

忘记缩进额外的代码行

  • 有时候,循环能够运行且不会报告错误,但结果可能出人意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。

不必要的缩进

  • 如果你不小心缩进了无须缩进的代码行,Python 将指出这种错误。
  • 为避免意外缩进错误,请只缩进需要缩进的代码。

循环后不必要的缩进

  • 如果不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。

遗漏了冒号

  • 如果不小心遗漏了冒号,将导致语法错误,因为 Python 不知道你意欲何为。

创建数值列表

使用函数 range()

  • Python 函数 range() 能让你轻松生成一系列数。
for value in range(1, 5):
    print(value)
  • 调用函数 range() 时,也可只指定一个参数,这样它将从 0 开始。

使用 range() 创建数字列表

  • 要创建数字列表,可使用函数 list()range() 的结果直接转换为列表。如果将 range() 作为 list() 的参数,输出将是一个数字列表。
  • 将一组数转换为列表,可使用 list()
numbers = list(range(1, 6))
print(numbers)
  • 使用函数 range() 时,还可指定步长。为此,可给这个函数指定第三个参数,Python 将根据这个步长来生成数。
even_numbers = list(range(2, 11, 2))
print(even_numbers)
  • 使用函数 range() 几乎能够创建任何需要的数集。
  • 下面的代码演示了如何将前 10 个整数的平方加入一个列表中:
squares = []

for value in range(1, 11):
    square = value ** 2
    squares.append(square)

print(squares)
  • 为了让代码更简洁,可不使用临时变量 square,而直接将每个计算得到的值附加到列表末尾:
squares = []

for value in range(1, 11):
    squares.append(value ** 2)

print(squares)

对数字列表执行简单的统计计算

  • 有几个专门用于处理数字列表的 Python 函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))

本节使用的数字列表都很短,但这里介绍的知识也适用于包含数百万个数的列表。

列表解析

  • 列表解析for 循环和创建新元素的代码合并成一行,并自动附加新元素。
  • 使用列表解析创建平方数列表:
squares = [value ** 2 for value in range(1, 11)]
print(squares)

使用列表的一部分

  • 你还可以处理列表的部分元素,Python 称之为切片

切片

  • 要创建切片,可指定要使用的第一个元素和最后一个元素的索引。
players =  ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
  • 你可以生成列表的任意子集。
  • 如果没有指定第一个索引,Python 将自动从列表开头开始:
players =  ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
  • 要让切片终止于列表末尾,也可使用类似的语法。
players =  ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
  • 无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。
  • 负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任意切片:
players =  ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])

可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围内每隔多少元素提取一个。

遍历切片

  • 如果要遍历列表的部分元素,可在 for 循环中使用切片。
players = ['charles', 'martina', 'michael', 'florence', 'eli']

print("Here are the first three palyers on my team:")

for player in players[:3]:
    print(player.title())

复制列表

  • 要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print('My favorite foods are:')
print(my_foods)
print("\nMy frined's favorite foods are:")
print(friend_foods)

friend_foods = my_foods 不是复制,只是关联,会指向同一个内存地址,任意一个列表的改变都会改变另一个列表的值。

元组

  • 列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。
  • 有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。

定义元组

  • 元组看起来很像列表,但使用圆括号而非中括号来标识。
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])

严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。

  • 如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:
my_t = (3,)
  • 创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

遍历元组中的所有值

dimensions = (200, 50)

for dimension in dimensions:
    print(dimension)

修改元组变量

  • 虽然不能修改元组的元素,但可以给存储元组的变量赋值。
dimensions = (200, 50)

print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)
  • Python 不会引发任何错误,因为给元组变量重新赋值是合法的。

设置代码格式

  • PEP8