python从入门到入坟 三(吕万友)

上一节学习了字符串的处理,其中也涉及到一些方法;等以后真正实用后再进行回顾。。今天继续学习新的知识。

  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  遍历例子:

dict = {'Name': 'Runoob', 'Age': 7}
for i,j in dict.items():
    print(i, ":\t", j)

输出:

Name :   Runoob
Age :    7

Python 字典 fromkeys() 函数用于创建一个新字典.

字典是支持无限极嵌套的,如下面代码:
citys={
    '北京':{
        '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
        '海淀':['圆明园','苏州街','中关村','北京大学'],
        '昌平':['沙河','南口','小汤山',],
        '怀柔':['桃花','梅花','大山'],
        '密云':['密云A','密云B','密云C']
    },
    '河北':{
        '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
        '张家口':['张家口A','张家口B','张家口C'],
        '承德':['承德A','承德B','承德C','承德D']
    }
}

可以使用如下方法进行列出

for i in citys['北京']:
    print(i)

将列出如下结果:

朝阳
海淀
昌平
怀柔
密云
for i in citys['北京']['海淀']:
    print(i)

输出如下结果:

圆明园
苏州街
中关村
北京大学

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值