1 #数据结构
2
3 #元组
4 #元组是一种不可变的序列,一旦创建就不能修改了
5
6 #创建元组
7
8 a = (5,4,1,8,8);9 print(a);10 #这样我们就创建了一个元组
11
12 b=([1,2,3,4]);13 print(b);14 #这样也可以,但是输出的结果变成了[1,2,3,4]
15 #[]是列表
16 #那这里是不是就是把这个列表当成了一个元素呢?
17
18 c=([1,2,3,4],[5,6,7,8]);19 print(b[1]);20 print(c);21 print(c[0]);22 #通过上面的测试
23 #我们发现了,这里是把列表当成了元组里面的一个元素
24 #但是,如果这里只有一个列表作为元素,你会发现你依然可以用b[]来调用里面的数据
25 #这表示当只有一个时,可以直接用b[]来索引
26
27 #其实仔细想会发现,这样的结构有点像C中间的二维数组
28 #是这样的吗?
29 #我们来测试一下
30 i=1;31 j=2;32 print("第{0}层,第{1}个,对应数据为{2}".format(i,j,c[i][j]));33 #完全一致,这里我们显然可以把他当作二维数组来加深理解
34
35 #而我们一开始学Python的时候就有提到过
36 #Python时动态的
37 #而不论是List还是Tuple都是可以存储不同类型的数据的
38
39 d=("说人话",5,4,1,8,8,7+6j);40 print(d);41 #这里我们建立了一个有不同类型数据的元组
42 #依然可以正常使用
43 #但是元组真的就和二维数组没别的区别吗?
44 #比如这样子输入
45 #print(d[2][1]);
46 #就一定会报错
47 #我们知道,再二维数组中的话,建立的是矩阵
48 #1 2 3
49 #4 0 0
50 #5 0 0
51 #就算我们不进行输入
52 #最后也会自动给你补上一个0
53 #但是元组毕竟不是数组
54 #说 人 话
55 #4
56 #5
57 #元组并不会给你补上这些0
58 #所以如果我们用上面那句代码来调用的话
59 #必然会报错的(其实我也是偶然发现的)
60
61 #和序列不一样
62 #元组可以使用函数的形式来创造
63 #说白了就是强制转换(就这啊,哎)
64
65 #如果我们这么写,那一定是错的
66 #因为这本质就一个强制转换
67 #e=tuple(5,9,2,5,2);
68
69
70 #e=tuple(5);
71 #可是我们这么写,也是会报错
72 #报错说int是不可迭代的
73 #就是语法上规定不可以
74
75 #注意,我们在看书的时候发现总是有[]的存在
76 #那一般不是表示要用[]而是告诉我们这是可以填的数据
77 #注意这里的区分一下
78 #e=tuple(5)错误
79 #但是e=tuple([5]);正确 (验证去96行)
80
81 e=tuple([1,5,6,8,9]);82
83 print(e);84 #但是我们知道列表是可以和元组做直接的转换的
85
86 #曲线方法来int转tuple
87 f=666;88 print(tuple([f]));89 f=list([f]);90 #f=[f];
91 tuple(f);92 print(f);93 #成功
94
95 print("/");96
97 #验证[]在这里的影响
98 g=666;99 print(type([g]));#list
100 print(type(g));#int
101 #现在就很明显了吧
102 #为什么tuple(666)不行但是tuple([666])可以
103 #原因就在于这里的[]其实吧他的类型转换成了list,而不是原来的int
104 #这样就可以迭代了