写点什么

如何从零开始学 Python:(5)如何处理列表中嵌套多个列表?

用户头像
广之巅
关注
发布于: 2021 年 04 月 21 日
如何从零开始学Python:(5)如何处理列表中嵌套多个列表?

一、创建嵌套列表时

各个列表项之间用逗号”,”隔开,每个列表的起始位置,都要用中括号“[”开始,结束时,对应用“]”结束。

  • 注意:有多少个列表,对应就有多少个中括号”[]”


例如:《Head First Python(中文版)》书中的例子:

movies=["The HolyGrail",1975,"Terry Jones &Terry Gilliam",91,              ["GrahamChapman",                 ["Michael Palin","JohnCleese","Terry Gilliam","Eric Idle","TerryJones"]]]
复制代码


二、访问列表数据时

同样,也是通过中括号记法来访问。例如,

>>> print(movies[4][1][3])Eric Idle
复制代码


  • 在这里,可能有些人不明白,为什么是 movies[4][1][3]?

  • movies[4]是第二个内列表的起始位置,而该列表本身又是嵌套在另外一个列表中,所以是 movies[4][1]。

  • 而 movies[4][1][3],则是指第三个列表的第四个列表项,所以,在这里输出的是“Eric Idle”。


三、迭代处理列表时

使用 for 循环处理,这时候只能分别输出外列表的各个数据项,而嵌套的列表则会原样输出。因为对于外列表来说,内列表仅仅是外列表中的一个列表项。


例如:《Head First Python(中文版)》书中的例子:

>>> movies=["The HolyGrail",1975,"Terry Jones &Terry Gilliam",91,                   ["GrahamChapman",                     ["Michael Palin","JohnCleese","Terry Gilliam","Eric Idle","TerryJones"]]]>>> for each_item in movies:         print(each_item)             The Holy Grail  1975  Terry Jones &Terry Gilliam  91  ['Graham Chapman', ['Michael Palin', 'JohnCleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']]
复制代码

这时侯,需要先处理这个列表,检查这个列表项本身是不是另外一个列表


四、在列表中查找列表时

第一种方法:使用 for 循环与 if……else……模式处理,直至输出所有的列表中不再含有列表。具体步骤:

  1. 跟其他列表一样,先使用 for 循环处理。

  2. 使用 if 检查当前的列表项是不是一个列表。

  3. 记住一个 BIF:isinstance():允许检查某个特定标识符是否包含某个特定类型的数据,在这里,有固定的类型,并且条件测试后面,紧跟冒号”:”。

  4. 如果是一个列表,需要使用 for 循环再次进行处理,这时候,内循环需要赋予一个新的目标标识符。

    注意:有多少个列表,就要使用 for 循环处理多少次,并赋予多少个目标标识符。

  5. 依次进行完 for 循环处理后,输出最新的目标标识符。

  6. 如果不是一个列表,使用 else 指令,后面,紧跟冒号”:”。

    注意:有多少个 if,对应要输出多少个 else,并且 if 与 else 前后缩进的位置是一样的。

  7. 最后,紧接着,依次输出与 if 对应的目标标识符。

 

例如:《Head First Python(中文版)》书中的例子:

>>> movies=["The Holy Grail",1975,"TerryJones &Terry Gilliam",91,                   ["GrahamChapman",                     ["Michael Palin","JohnCleese","Terry Gilliam","Eric Idle","TerryJones"]]]>>> for each_item in movies:         if isinstance(each_item,list):                  for nested_item in each_item:                           if isinstance(nested_item,list):                                    for deeper_item in nested_item:                                             print(deeper_item)                           else:                                    print(nested_item)         else:                    print(each_item)                   The Holy Grail      1975      Terry Jones &Terry Gilliam      91      Graham Chapman      Michael Palin      John Cleese      Terry Gilliam      Eric Idle      Terry Jones
复制代码


第二种方法:使用函数处理。具体步骤:

  1. 定义一个函数。使用 def 函数名(参数):的标准格式进行定义,用一个 for 循环处理列表,使用一个 if 检查当前的列表项是不是一个列表,如果是一个列表,则调用函数,如果不是一个列表,则输出目标标识符。

  2. 调用函数。

 

例如:《Head First Python(中文版)》书中的例子:

>>> movies=["The HolyGrail",1975,"Terry Jones &Terry Gilliam",91,                   ["GrahamChapman",                     ["Michael Palin","JohnCleese","Terry Gilliam","Eric Idle","TerryJones"]]]>>> def print_lol(the_list):         for each_item in the_list:                  if isinstance(each_item,list):                           print_lol(each_item)                  else:                           print(each_item)                                 >>> print_lol(movies)The Holy Grail1975Terry Jones &Terry Gilliam91Graham ChapmanMichael PalinJohn CleeseTerry GilliamEric IdleTerry Jones
复制代码


以上,是如何处理列表中嵌套多个列表的方法。看完一个文科生,一个职场女性,一个小白的总结后,你知道该怎么做了吗?

发布于: 2021 年 04 月 21 日阅读数: 20
用户头像

广之巅

关注

还未添加个人签名 2020.10.24 加入

还未添加个人简介

评论

发布
暂无评论
如何从零开始学Python:(5)如何处理列表中嵌套多个列表?