上一节学习了字符串的处理,其中也涉及到一些方法;等以后真正实用后再进行回顾。。今天继续学习新的知识。
python 的三种数据存储方式:tuple,list,dictionary ;
list 没有什么特殊的地方,可能如果有,则需要对二维list做下了解。
tuple :
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
首先是type(); 如果你的代码冗长或者你想判断这个变量的属性;你可以使用type(变量名)
eg:
tup1 = (1,) print(type(tup1))得到如下结果:
<class 'tuple'>
刚做了python关于二维数组list的实验:
lst1=[[0]*3]*4 lst2=lst1 lst1[0][1]=2 print (lst2)输出
[[0, 2, 0], [0, 2, 0], [0, 2, 0], [0, 2, 0]]
是不是觉得很奇怪,这里跟python的浅拷贝有关。 不知道的小伙伴可以翻阅The Python Standard Library 找到答案。
那么如何进行list的二维定义和操作呢:
lst1=[[0]*3]*4 (定义了一个浅拷贝的3行4列二维list)
list * n => list, list乘以n以后还是一个 list, 只是对原list里面的 元素 是浅拷贝了n份。[ [0] ] * 3, 里面的元素是 [0], 这是一个list,所以会存在浅拷贝之后指向同一个list的问题。 [0] * 3 , 里面的元素是 0, 是一个 int ,不可变对象,浅拷贝没问题
整个过程我们可以通过 id()方法来判断是否是指向同一个id
#!/usr/bin/python # -*- coding:UTF-8 -*- lst1 = [[0] * 3] * 4 lst2 = lst1 lst1[0][1] = 2 print(id(lst2[0][0]), id(lst2[1][1]), id(lst2[2][2])) print(id(lst2[0]), id(lst2[1]), id(lst2[2]))输出的结果为:
1399156160 1399156224 1399156160
3041599247752 3041599247752 3041599247752
我们可以看出 : int 是不可变对象; 因此 [0]*3指向的id是根据0这个int所对应的值来获得的;当我们把lst1[0][1]=2时,我们可以发现id发生了变化,变为1399156224 ;而list* 4中的list是可变对象 :所以对应的id就是他的门牌号,不管房子里怎么装修,门牌号是不变的。对于不可变对象的id,就类似于一条固定的街道的门牌号。你知道一号门牌号里是a商品,如果你要b商品,你就得换个门牌号进去。
因此定义二维数组的方式为 lst1=[([0]*3)for i in range(4)] 或者
lst1=[[]for i in range(4)]
lst1[0].append(1)
lst1[1].append(2)
lst1[2].append(3)
lst1[3].append(4)
接下来就是dictionary :
radiansdict.copy() |
这个比较有意思,这个特意强调了下是浅复制。
dictionary 遍历例子:
输出:
可以使用如下方法进行列出
将列出如下结果:
输出如下结果: