二维列表的使用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

在Python中,由于列表元素还可以是列表,所以它也支持二维列表的概念。那么什么是二维列表?前文提到酒店有很多房间,这些房间都可以构成一个列表,如果这个酒店有500个房间,那么拿到499号房钥匙的旅客可能就不高兴了,从1号房走到499号房要花好长时间,因此酒店设置了很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊到每个楼层,这种结构就是二维列表结构。使用二维列表结构表示酒店每个楼层的房间号的效果如图15所示。

图15  二维列表结构的楼层房间号

二维列表中的信息以行和列的形式表示,第一个下标代表元素所在的行,第二个下标代表元素所在的列。在Python中,创建二维列表有以下三种常用的方法。

(1)直接定义二维列表

在Python中,二维列表是包含列表的列表,即一个列表的每一个元素又都是一个列表。例如,下面就是一个二维列表:

[['千', '山', '鸟', '飞', '绝'],

['万', '径', '人', '踪', '灭'],

['孤', '舟', '蓑', '笠', '翁'],

['独', '钓', '寒', '江', '雪']]

在创建二维列表时,可以直接使用下面的语法格式进行定义:

listname = [[元素11, 元素12, 元素13, …, 元素1n],

 [元素21, 元素22, 元素23, …, 元素2n],

 …,

 [元素n1, 元素n2, 元素n3, …, 元素nn]]

参数说明:

l   listname:表示生成的列表名称。

l   [元素11, 元素12, 元素13, …, 元素1n]:表示二维列表的第一行,也是一个列表。其中“元素11,元素12,…元素1n”代表第一行中的列。

l   [元素21, 元素22, 元素23, …, 元素2n]:表示二维列表的第二行。

l   [元素n1, 元素n2, 元素n3, …, 元素nn]:表示二维列表的第n行。

例如,定义一个包含4行5列的二维列表,可以使用下面的代码:

verse = [['千', '山', '鸟', '飞', '绝'], ['万', '径', '人', '踪', '灭'],

['孤', '舟', '蓑', '笠', '翁'], ['独', '钓', '寒', '江', '雪']]

执行上面的代码,将创建以下二维列表:

[['千', '山', '鸟', '飞', '绝'], ['万', '径', '人', '踪', '灭'], ['孤', '舟', '蓑', '笠', '翁'], ['独', '钓', '寒', '江', '雪']]

(2)使用嵌套的for循环创建

创建二维列表,可以使用嵌套的for循环实现。例如,创建一个包含4行5列的二维列表,可以使用下面的代码:

arr = []                      # 创建一个空列表

for i in range(4):

    arr.append([])             # 在空列表中再添加一个空列表

    for j in range(5):

        arr[i].append(j)       # 为内层列表添加元素

上面代码在执行后,将创建以下二维列表:

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

(3)使用列表推导式创建

使用列表推导式也可以创建二维列表,因为这种方法比较简洁,所以建议使用这种方法创建二维列表。例如,使用列表推导式创建一个包含4行5列的二维列表可以使用下面的代码:

arr = [[j for j in range(5)] for i in range(4)]

上面代码在执行后,将创建以下二维列表:

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

创建二维数组后,可以通过以下语法格式访问列表中的元素:

listname[下标1][下标2]

参数说明:

l   listname:列表名称。

l  下标1:表示列表中第几行,下标值从0开始,即第一行的下标为0。

l  下标2:表示列表中第几列,下标值从0开始,即第一列的下标为0。

例如,要访问二维列表中的第2行,第4列,可以使用下面的代码:

verse[1][3]

下面通过一个具体实例演示二维列表的应用。

  实例04  使用二维列表输出不同版式的古诗

在IDLE中创建一个名称为printverse.py的文件,然后在该文件中首先定义4个字符串,内容为柳宗元的《江雪》中的诗句,并定义一个二维列表,然后应用嵌套的for循环将古诗以横版方式输出,再将二维列表进行逆序排列,最后应用嵌套的for循环将古诗以竖版方式输出,代码如下:

str1 = "千山鸟飞绝"

str2 = "万径人踪灭"

str3 = "孤舟蓑笠翁"

str4 = "独钓寒江雪"

verse = [list(str1), list(str2), list(str3), list(str4)]      # 定义一个二维列表

print("\n-- 横版 --\n")

for i in range(4):                                      # 循环古诗的每一行

    for j in range(5):                                    # 循环每一行的每个字(列)

        if j == 4:                                        # 如果是一行中的最后一个字

            print(verse[i][j])                              # 换行输出

        else:

            print(verse[i][j], end="")                     # 不换行输出

verse.reverse()                                              # 对列表进行逆序排列

print("\n-- 竖版 --\n")

for i in range(5):                                           # 循环每一行的每个字(列)

    for j in range(4):                                       # 循环新逆序排列后的第一行

        if j == 3:                                           # 如果是最后一行

            print(verse[j][i])                               # 换行输出

        else:

            print(verse[j][i], end="")                      # 不换行输出

说明:在上面的代码中,list()函数用于将字符串转换为列表;列表对象的reverse()方法用于对列表进行逆序排列,即将列表的最后一个元素移到第一个,倒数第二个元素移到第二个,以此类推。

运行结果如图16所示。

图16  使用二维列表输出古诗《江雪》

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值