3小时入门Python——第三十三课嵌套列表

  |   0 评论   |   0 浏览   |   给我丶鼓励

Python 中的列表可以包含任何对象作为其元素,包括其他列表-它们称为嵌套列表。这是嵌套列表的几个示例:

nested_letters  = ['a', 'b', ['c', 'd'], 'e']
nested_numbers = [[1], [2], [3]]

访问嵌套列表的元素

与常规列表一样,嵌套列表的元素可以由索引访问。请注意,嵌套列表仍视为其父列表中的单个元素。

numbers = [1, [2, 3], 4]
nested_numbers = numbers[1]
 
print(nested_numbers)     # [2, 3]
print(nested_numbers[1])  # 3

在此示例中,我们获得了 numbers 按索引 1 的第二个元素。该元素是嵌套列表 [2, 3]。然后,我们 nested_numbers 按索引 1 打印第二个元素。该元素为 3。

也可以使用方括号序列访问嵌套列表的元素而无需其他变量。

lists = [0, [1, [2, 3]]]
print(lists[1][1][0])   # 2

基本上,在建立索引时,我们从外部列表更深入到最内部。自然地,如果我们请求一个不存在的级别的元素,则会收到错误消息:

print(lists[1][1][0][1])  # TypeError: 'int' object is not subscriptable

就像我们正在访问不存在的元素一样,在存在的级别上:

print(lists[3])  # IndexError: list index out of range

矩阵

嵌套列表是表示矩阵的便捷方法。例如矩阵

可能表示为:

M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

注意,在这样的列表中,所有嵌套列表的长度必须相同,并且等于矩阵的维数。

当我们要从矩阵中提取元素时,例如元素_M [1] [2] = 6_,第一个索引选择行,第二个索引选择列。但是,您知道,它与数学表示形式的不同之处在于,此处的编号从零开始,而不是从一开始。

嵌套列表理解

要遍历嵌套列表,我们可以使用嵌套列表推导。它基本上是两个或多个列表推导的组合,并且非常类似于嵌套的“ for”循环。为了说明这种理解的基本语法,让我们考虑一个示例。

想象一所学校是一个班级列表,而班级列表又是学生列表(他们的名字)。

# original list
school = [["Mary", "Jack", "Tiffany"], 
          ["Brad", "Claire"],
          ["Molly", "Andy", "Carla"]]

如果您要创建所有班级所有学生的列表,而又没有列表理解,它将如下所示:

student_list = []
for class_group in school:
    for student in class_group:
        student_list.append(student)

另外,我们也可以对双 for 循环使用理解,然后看起来像这样:

student_list = [student for class_group in school for student in class_group]

在这两种情况下,结果将是相同的:

print(student_list)
# result: ["Mary", "Jack", "Tiffany", "Brad", "Claire", "Molly", "Andy", "Carla"]

在这种情况下,for 循环的顺序与带缩进的表示法中的顺序相同:首先是外循环,然后是内循环。

但是,这种方法可能比没有列表理解的方法更不清晰,特别是在我们需要使用两个以上 for 循环的情况下:它会使代码变得不可读和违反直觉。

考虑以下代码行:

matrix = [[j for j in range(5)] for i in range(2)]

要理解所创建的矩阵是什么样子并不容易。与何时将以这种方式进行比较:

matrix = [] 
  
for i in range(2): 
      
    # create empty row (a sublist inside our list)
    matrix.append([]) 
      
    for j in range(5): 
        matrix[i].append(j)

它更具可读性,现在很明显,矩阵看起来像:

matrix = [[0, 1, 2, 3, 4],
          [0, 1, 2, 3, 4]]

重要的是要记住,较短的代码并不意味着更好的代码,因此在使用嵌套列表时,您不应滥用列表理解。

这样的列表在数据结构中是一种非常有用的容器,现在您知道如何在一个外部列表中存储多个内部列表,如何访问它们并使用它们。


标题:3小时入门Python——第三十三课嵌套列表
作者:给我丶鼓励
地址:https://blog.doiduoyi.com/articles/1594214586208.html

评论

发表评论