30天学会Python: Day 8-维度展开 二维容器

用容器装非容器的资料(整数、浮点数、布林)是一维的概念,可以想成是数学中的数列,或是前面举例的火车

如果容器里面装容器,就可以达成二维或是多维的概念

二维容器

可以想成是数学中的矩阵,或是表格的概念

如果用火车和货柜来举例,就是一节车厢往上叠好几个货柜
这个时候一个货柜会有两个编号,换句话说这个时候要有两个编号才能找到一个货柜

以表格来说,一个表格中的资料可以用第 i 列第 j 栏表示
下面表格中,123在第2列第4栏

1 2 3 4
1 1 3 5 45
2 32 64 16 123
3 12 43 11 66

串列中有串列

如果一个串列的元也是串列,就可以达成二维的概念

上面的表格可以用下面的串列表示

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
print(data)

data 中的每一个元都是一个串列,data[0][1, 3, 5, 45]data[1][32, 64, 16, 123]data[2][12, 43, 11, 66]

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
print(data[0])
print(data[1])
print(data[2])

因为每个元都是独立的串列,所以实际上每个串列的长度可以不一样

data = [[1, 3, 5, 45, 6, 7,10],
        [32, 64, 16, 123],
        [12, 43, 11, 66, 2, 43]]
print(data)

因为 data[0], data[1], data[2] 都是串列,所以可以用索引取得它们的元

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
print(data[0][0], data[0][1], data[0][2], data[0][3])
print(data[1][0], data[1][1], data[1][2], data[0][3])
print(data[2][0], data[2][1], data[2][2], data[2][3])

因为串列中元的型别可以不同,所以 data 除了串列还可以有其他型态的资料

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
data.append(123)
print(data)

append() 可以在 data 中再加入串列

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
data.append([1, 2, 3, 4, 5])
print(data)

也可以对 data[0], data[1], data[2] 增加/删除内容

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
data[0].append(64)
data[1].pop(3)
print(data[0])
print(data[1])

用回圈将 data 中的元显示到视窗上

data = [[1, 3, 5, 45],
        [32, 64, 16, 123],
        [12, 43, 11, 66]]
for i in range(len(data)):
	print(data[i])

在回圈中加上回圈,可以把 data[0]~data[2] 的元显示到视窗上

data = [[1, 3, 5],
        [32, 64, 123]]
for i in range(len(data)):
	for j in range(len(data[i])):
		print(data[i][j], end=' ')
	print()

因为 data 有三个元,所以 range(len(data)) 会产生 0, 1 两个数字,在第一个回圈中:

  1. i 是0,data[i] 等同 data[0],所以 range(len(data[i])) 就是 range(len(data[0])),产生 0, 1, 2,所以在第二个回圈中:
    1. j 是0,data[i][j] 等同 data[0][0],视窗显示1
    2. j 是1,data[i][j] 等同 data[0][1],视窗显示3
    3. j 是2,data[i][j] 等同 data[0][2],视窗显示5
    4. 回圈结束,所以会执行最後一行的 print() 让结果换行
  2. i 是1,data[i] 等同 data[1],所以 range(len(data[i])) 就是 range(len(data[1])),产生 0, 1, 2,所以在第二个回圈中:
    1. j 是0,data[i][j] 等同 data[1][0],视窗显示32
    2. j 是1,data[i][j] 等同 data[1][1],视窗显示64
    3. j 是2,data[i][j] 等同 data[1][2],视窗显示123

分解动作

以下的程序码有一样的效果

data = [[1, 3, 5],
        [32, 64, 123]]
for i in data:
	for j in i:
		print(j, end=' ')
	print()

串列中有字典

先复习一下字典,字典中的每个值都对应到一个键
就像是证件上的栏位一样,每一栏都有一个项目的名称,且每一栏都只有一笔资料

Name Number Age
Jay 001 18

上面的表格用字典表示

student = {'Name': 'Jay', 'Number': '001', 'Age': 18}

用串列储存多个字典,可以一次储存多个有相同键的字典,达到类似以下表格的结构

Name Number Age
1 Jay 001 18
2 John 002 19
3 Johnny 120 22
4 Joe 121 36
students = [{'Name': 'Jay', 'Number': '001', 'Age': 18},
           {'Name': 'John', 'Number': '002', 'Age': 19},
           {'Name': 'Johnny', 'Number': '120', 'Age': 22},
           {'Name': 'Joe', 'Number': '121', 'Age': 26}
           ]

用回圈把 students 的每个元列出来

students = [{'Name': 'Jay', 'Number': '001', 'Age': 18},
           {'Name': 'John', 'Number': '002', 'Age': 19},
           {'Name': 'Johnny', 'Number': '120', 'Age': 22},
           {'Name': 'Joe', 'Number': '121', 'Age': 26}
           ]
for student in students:
	print(student)

字典的方法 keys() 可以取得字典中所有的键

student = {'Name': 'Jay', 'Number': '001', 'Age': 18}
print(student.keys())

用回圈可以从第一个键看到最後一个键

student = {'Name': 'Jay', 'Number': '001', 'Age': 18}
for i in student.keys():
	print(i)

如果要把 students[0]~students[2] 中的每个值列出来,可以用两个回圈达成

students = [{'Name': 'Jay', 'Number': '001', 'Age': 18},
           {'Name': 'John', 'Number': '002', 'Age': 19},
           {'Name': 'Johnny', 'Number': '120', 'Age': 22},
           {'Name': 'Joe', 'Number': '121', 'Age': 26}
           ]
for student in students:
	for key in student.keys():
		print(student[key], end=' ')
 	print()

可以在显示值的同时显示键,因为键本身是字串,所以可以用 + 把键和 : 串在一起

students = [{'Name': 'Jay', 'Number': '001', 'Age': 18},
           {'Name': 'John', 'Number': '002', 'Age': 19},
           {'Name': 'Johnny', 'Number': '120', 'Age': 22},
           {'Name': 'Joe', 'Number': '121', 'Age': 26}
           ]
for student in students:
	for key in student.keys():
		print(key+':', student[key], end=' ')
 	print()


<<:  纯手工打造UART版资料清洗工具 之 com0com for win10 x64 工具介绍

>>:  Fortran 语言和你 SAY HELLO!!

CSS微动画 - 倒数计时,绘制圆饼图!

Q: 这个用Svg做吧? A: 如果你的需求跟我这款一样,Css就可以画罗~ 上一篇的时钟给小编这...

[Day 17 - npm] 哆啦A梦有百宝袋,我有套件管理工具npm

前端的社群发展愈来愈蓬勃,延伸出各式各样基於 HTML、CSS、JS 的开源套件,像是 Bootst...

[Day-22] R语言 - 分群应用(三) 相异点侦测 ( detect dissimilar point by clustering in R.Studio )

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 ## 应用三: 相异点侦测 #### libr...

【文字分析】3-5 词嵌入模型

说明 藉由马可夫模型的机率特性,将语言中的最小单位-词语组成句子,再由句子组为文章 马可夫模型:一种...

【day19】聊天室(下) X Realtime database

好的,那接下来我们就要来显示我们的资料啦!! 由於我们的资料会有一个是对方传过来的,一个是我们自己...