设为首页 收藏本站
查看: 1173|回复: 0

[经验分享] [原创]Python入门学习之数据结构

[复制链接]
发表于 2015-11-29 14:51:13 | 显示全部楼层 |阅读模式
  Preamble:
  在未学习python之前,使用c/c++已有5年之久。虽对python刚学习,但也领略到了python的强大之处,开拓了自己的视野和思维。
  
  一 变量
  python中的变量与c/c++中的变量不同。在c/c++中,变量的本质就是内存的地址,但在python中,当我们定义一个变量并赋值时,如下: 



a='ABC'

  python的解释器干了两件事情:(1)在内存中创建一个‘ABC’的字符串;(2)在内存中再创建一个名为a的变量,并把它指向‘ABC’。也就是说,对于python占用的内存比c/c++中要多。这里一定要正确python中对定义变量的处理。
  
  二 编码
  对于编码的问题,有历史因素在里面。由于计算机最初是在美国制造,故最早只是把常用的127个字符编码到了计算机里,也就是ASCII码。但是在后来的发展中,还需要处理像中文这样的字符,此时单个字节就不够用了,至少需要使用2个字节。为了处理全世界所有的语言,就发明了Unicode来解决此问题。Unicode通常使用2个字节表示一个字符,个别偏僻的可能需要用到4个字节。
  引入Unicode虽然解决了多种语言的编码问题,但是在使用中还是存在资源浪费的问题。如果统一使用Unicode编码,但是所有的文本都是英文的话,那岂不是要浪费很多内存?为了解决这个问题,后来引入了UTF-8编码。在UTF-8编码中,会把Unicode字符根据字符需要占用的字节数进行分配,比如英文字母就编码成1个字节,汉字通常是3个字节。这样就可以节省很多内存了。
  
  三 list和tuple
  list和tuple都是python内置的一数据类型。其区别在于tuple是一旦初始化后就不可以再更改了。定义一个list如下:



#define a list
l=['Michael','Luffy','Nancy']

  list是一种有序的集合,与c/c++中的数组一样,下标从0开始,可以随时对其进行添加和删除其中的元素。可以对list进行的操作有:append(),insert(),pop()和[]。
  当然list是可以嵌套定义的,如下:



#define a nest list
l=['Michael','Luffy','Nancy', ['Corey','Jason']]

  tuple必须在初始化时进行赋值,如下所示:



#define a tuple
t=('Michael','Luffy','Nancy')

  这里我们需要对tuple的不可更改性进行一下讲解。tuple的不可更改性只是针对对它的元素的“指向”,比如上面的例子中,tuple分别指向'Michael','Luffy'和'Nancy',所不能更改的就是只能一直指向这些字符串,而不能在定义之后再指向其他字符串。
  理解了“不可更改”的真正含义,我们就可以定义一个可以变换内容的tuple了。如下: 



#define a alterable tuple
t=('Michael','Luffy','Nancy',['Corey','Jason'])
t[3][0]='Jefrey'
t[3][1]='Avery'

  从上面的代码可以看出,先定义一个名为t的tuple。在修改了数据之后并未修改初始化时指向的list,只是更改了list的内容,对于python来说这是允许的。
  
  四 dict
  python中的dict就是c/c++中的map,是一个由键/值对组成的结构。对于dict我们要注意的是它对key的要求,dict要求key必须是不可变对象。这是因为dict根据key来计算Value的存储位置,如果每次计算相同的key得出的结果不同,那么dict的内部就混乱了,通过这个key计算位置的算法称之为哈希算法。
  在python中,字符串和整数都是不可变对象,而list则是可变,不能做为key使用。
  
  五 后记
  上述这些都是个人学习python总结所得,如有错误之处,敬请留言!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144997-1-1.html 上篇帖子: Python的名字绑定 下篇帖子: 使用python来调试串口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表