0
点赞
收藏
分享

微信扫一扫

列表与字典---->二维列表

small_Sun 2023-06-10 阅读 93

一、二维列表基础

列表名 = [[一维列表],[一维列表],[一维列表],……]

二维列表可以看作特殊的一维列表,通过两个下标进行访问。二维列表中的各个一维列表长度可以不相同。

d = [[1, 2, 3], [2, 3, 4], [4, 5, 6]]
for i in range(len(d)):
    for j in range(len(d[i])):
        print('%3d' %d[i][j], end=' ')
    print()

语句d创建了一个三行三列的二位列表,len(d)返回二位列表d的行数,len(d[i])返回下标为i的行中包含的元素个数。

二维列表的创建可以通过赋值语句实现,若创建还不太确定二维列表中的具体数据,可以给定某个特殊值,并于*进行复制。

b = [[0]*5]*4

创建包含四行五列的二维列表。

可以使用is或is not检测二维列表的各行的一维列表或各个元素是否相同对象。

d = [[0]*2]*2
print(d[0] is d[1]) #True
print(d[0][0] is d[1][0]) #True

若修改使用*复制一维列表所得二维列表中的各个元素,则使用不同标识的同一对象只能保存最后更新的数据。

使用列表的成员函数append()可以往二维列表中添加一维列表

d = [[0]*2]*2
d.append([0]*2)
print(d[2] is d[0]) #False

append()方法添加的行与其余各行都不是相同对象。

二维列表的使用

Q:如何在输入两个整数m、n之后,给m行n列的二维列表的每个元素赋值?

A1:用列表产生式创建二维列表 a = [[0]*n for i in range(m)]

m, n = map(int, input().split())
a = [[0]*n for i in range(m)]
for i in range(m):
    for j in range(n):
        a[i][j] = (i+1) * (j+1)
for i in range(m):
    for j in range(n):
        if j > 0:
            print('', end= '')
        print(a[i][j], end='')
    print()

A2:初始化二维列表a为空列表,在一个执行m次的循环中,每次往二维列表a中添加包含n个0的一维列表。

m, n = map(int, input().split())
a = []
for i in range(m):
    t = [0] * n
    a.append(t)
for i in range(m):
    for j in range(n):
        a[i][j] = (i+1)*(j+1)
for i in range(m):
    for j in range(n):
        if j >0:
            print(' ', end=' ')
        print(a[i][j], end='')
    print()

Q:创建m行n列的二维列表一个有几种方法?

A:四种

b = [0]*n
a = [b]*m
a = [[0]*n]*m
a = [[0]*n for i in range(m)]
a = []
for i in range(m):
    a.append([0] * n)

二、二维列表的运用

1、方阵转置

第一行先输入一个整数n,接下来的n行每行输入n个整数构成一个n阶方阵,请将之转置并输出这个转置后的方阵。

解读:将方阵的行列进行互换。

n = int(input())
a = [[0] * n] * n
for i in range(n):
    a[i] = list(map(int, input().split()))
for i in range(n):
    for j in range(i):
        a[i][j], a[j][i] = a[j][i], a[i][j]
for i in range(n):
    print(* a[i])
2、杨辉三角形

输入整数n,构成并输出杨辉三角形。

解读:杨辉三角形:第一行的第一个和最后一个都是1,从第三行开始,其他元素a[i] [j] 等于其前一行同一列元素a[i-1] [j]及前一行前一列元素a[i-1] [j-1]之和。

n = int(input())
a = [[1] * i for i in range(1, n+1)]
for i in range(2, n):
    for j in range(1, i):
        a[i][j] = a[i-1][j] + a[i-1][j-1]
for i in range(n):
    for j in range(i+1):
        print('%5d' %a[i][j], end='')
    print()
3、蛇形矩阵

输入整数n,构造并输出蛇形矩阵。

解读:蛇形矩阵是由1开始的自然数依次排列成的一个上三角矩阵。每行从第一列的元素开始,其右上角的元素一次递增1,到第一行为止。

n = int(input())
a = [[0] * (n - i) for i in range(n)]
val = 1
for i in range(n):
    k = 0
    for j in range(i, -1, -1):
        a[j][k] = val
        k += 1
        val += 1

for i in range(n):
    print(* a[i])
举报

相关推荐

0 条评论