# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2 #从2.2开始,可以使用内建dict创建字典 fdict=dict((['x',1],['y',2])) print fdict #2.3开始,可以使用fromkeys()创建一个默认的字典,如果未给出,则显示None ddict={}.fromkeys(('x','y'),-1) print ddict ddict={}.fromkeys(('x','y')) print ddict #如何访问字典值 for keys in dict2.keys():     print 'keys=%s,value=%s'%(keys,dict2[keys]) #想得到字典中某个元素值,可以使用dict[key]方法 print dict2['name'] #或者使用for遍历 print 'name=%s and avg=%d and sex=%s'%\       (dict2['name'],dict2['avg'],dict2['sex']) #当访问一个未存在的值,会出现错误:KEYERROR错误 #检查字典中元素是否存在:has_key() in not in print 'name' in dict2 print dict2.has_key('name') print dict2.has_key('apply') #混合数字和字典串 dict3={} dict3[1]='abcd' dict3['1']=3.14 dict3[3.2]='xyz123' print dict3 #如何更新字典 dict2['name']='dog'#更新 dict2['avg']=30 print dict2 dict2['xl']='dz'#增加元素 print dict2 #字典格式化 print u'我叫:%(name)s,年龄:%(avg)d'%(dict2) #如何删除字典及元素 del dict2['name']#删除指定元素:name dict2.pop('avg')#删除并返回键了'w'的条目 dict2.clear()#删除dict2所有内容 del dict2#删除整个 #操作符:<,>,<=,>=,==,!=,<>,and,not,or #d[k]=v表示键k给字典中某元素赋值v #d[k]查找k,比较操作符:in,not in #内建函数和工厂函数 print type(dict1) print str(dict1) #字典中的比较算法(高级) dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print cmp(dict1,dict2) dict1['name']='apply' print cmp(dict1,dict2) dict1['avg']=24 dict1['sex1']='module' print cmp(dict1,dict2) #字典中的算法比较顺序 #比较字典的长度 #如果长度不相同,那么cmp(a,b)比较时,如果a大于b时,返回1,如果a<b时,返回-1,也就是说,字典中的数量越多,字典就越大 #len(a)>len(b)==>a>b #比较字典的键 #当字典中的长度一样时,那么按它的键比较,键比较顺序和keys()方法一样 # (注意:相同的键会映射到哈希表同一位置,保证对字典键检查一致性),如果字典键不匹配时,对这2个(不匹配的键)直接比较,当第一个不同的键大于第2个时,cmp()返回正值 # 比较字典的值 #当字典的长度一样,键也匹配时,则对字典中每个相同的键对应的值进行比较,一旦出现不匹配的值,就直接比较,结果同上面 #完全匹配 #如果前3点都相同,那么就说明是完全匹配,返回的是0 #相关函数 #dict() print dict(zip(('x','y'),(1,2))) print dict([['x',1],['y',2]]) print dict([('xy'[i-1],i)for i in range(1,3)]) #2.3开始dict)方法可以接受字典或者关键字参数字典 print dict(x=11,y=2) dict8=dict(x=11,y=2,c=4) dict9=dict(**dict8)#不建议这样的使用 print dict9 #更聪明的方法 dict9=dict8.copy() print dict9 #len() print len(dict2) #hash():判断某个对象是否可以做字典的键 #help(hash)#hash(object) -> integer #如果出错:typeerror #映射内建方法 print dict2.keys()#返回一个列表,包含字典中所有的键 print dict2.values()#返回一个列表,包含字典中所有的值 print dict2.items()#返回一个列表,包含字典中所有的键与值 print for i in dict2.keys():     print i,dict2[i]#遍历 #排序 print u'排序' for px in sorted(dict2,reverse=True):     print px ,dict2[px] #update()将一个字典内容添加到另一个字典中 #如果旧的键和新添加的键重复,那么会被新键覆盖 print 'update' ditc31={'year':2014} dict2.update(ditc31) print dict2 print u'删除' dict3.clear() #当使用了clear()方法时,会返回空字典 print dict3 #copy()复制 print u'复制' dict4=dict2.copy() print dict4 #get()查找字典中key,返回对应的value,如果不存在此key,则返回default值,注意:default默认为None print dict4.get('avg') print dict4.get('2013') print dict4.get('222','none1') #setdefault():检查中是否含有某个键,如果存在,就可以取它的值,如果未存在,就可以设置成默认值并返回 print dict4.setdefault('avg',24) print dict4.setdefault('year2','none2') #fromkeys() print {}.fromkeys('xyz') print {}.fromkeys('xyz',123)#print {}.fromkeys(('xyz'),123) #字典的键 #不允许一个键对应多个值 print u'不允许一个键对应多个值' print ' ' doct1={'foo':1231,'foo':'xyz'} print doct1 doct1['foo']=1234 print doct1 #键必须是可哈希的 #所有不可变的都可哈希,因此它们都可以作为字典的键,也就是说:值相同的数字,表示相同的键,简单说来:1和1.0哈希值是相同的,那么它们的键也相同 #同时也有一些可变的对象(很少)的可哈希的,可以使用__hash()__方法返回一个整形 #为什么键必须可只希的呢?因为解释器调用哈希函数,根据字典中键的值来计算存储你的数据,如果键可变对象,值也改变,如果键变化,哈希函数会映射到不同的地址来存储数据 #如果这样的情况发生,哈希函数不可能可靠的存储或者获取相关的数据 #例子:登录用户名和密码管理系统 db={}#字典 def newuser():#建立新用户名,检查名字是否存在     prompt='login desired:'     while True:         name=raw_input(prompt)         if name in db.keys():#or db.has_key(name)             prompt='name taken,try,another'             continue         else:             break     pwd=raw_input('password:')     db[name]=pwd def oldshow():#处理函数部分     name=raw_input('login:')     pwd=raw_input('password:')     password=db.get(name)     if password==pwd:         print u'登录:%s'%(name)     else:         print u'登录失败' def showmen():     prompt='''     (N)ew user login     (E)xisting user login     (Q)uit     enter chice'''     done=False     while not done:         chose=False         while not chose:             try:                 choice=raw_input(prompt).strip()[0].lower()             except(EOFError,KeyboardInterrupt):                 choice='q'             print '\nyou picked:[%s]'%(choice)             if choice not in 'neq':                 print 'invalid option,try,argin'             else:                 choice=True         if choice=='q':             done=True             break         if choice=='n':             newuser()         if choice=='e':             oldshow()

#集合类型(set) #支持in ,not in,len(),for循环,无法使用索引或者切片 #两种:可变set),不可变(frozenset) #可变的:增加,删除 #不可变:相反 #2.3版本中,通过集合模块来创建,并通过ImmutableSet类和Set类进行访问 #集合符号     python符号            说明 #∈              in                  是 #∉              not in               不是 #=               ==                  等于 #≠              != or <>           不等于 #⊂              <                  是。。。。的(严格)的子集 #⊆               <=                是。。。。的子集(包括非严格子集) #⊃               >                 是。。。。的(严格)超集 #⊇               >=               是。。。。的超集(包括非严格超集) #∩               &               交集 #∪               |               并集 # -或者\          -               补差或者相对补差 # ▲              ^               对称差分

#如何创建集合类型和赋值 s=set('cheeseshop')#可变 print s t=frozenset('BOOKSHOP')#不可变 print t print type(s) print type(t) print len(s),len(t) print len(s)==len(t) print s==t #访问集合中的值 #使用for遍历或者in,not in print 'c'in s print 'B' not in t for s1 in s:     print s1 #如果更新集合 s.add('2') print s s.update('pypy1') print s #如何删除,直接使用del s #集合类型操作符 #in ,not in s=set('cheeseshop') print 'k'in s print 'k'in t print 'c' not in t #集合等价/不等价 #用于在相同或者不同的集合之间做比较,2个集合相等的时:对于每个集合而言,当且仅当其中一个集合中的每个成员也是同一个集合的成员 #也就是说每个集合必须是另一个集合的一个子集,即s<=t和s>=t,均为True或者(s<=t and s>=t) #集合等价/不等价的类型或者集合成员的顺序无关,只和集合元素有关 print s==t print s!=t u=frozenset(s) print s==u print set('posh')==set('shop') #子集/超集 """ 大于,小于意味着2个集合在比较时不能相通,等于号允许非严格定义子集和超集 set支持严格(<)子集和非严格(<=)子集,也支持严格(>)超集和非严格(>=)超集,只有当第1个集合是第2个集合的严格子集时,才称第1个集合<第2个集合,反之,第1个是第2个的集合 """ print set('shop')<set('cheeseshop')#严格子集 print print set('bookshop')>=set('shop')#非严格超集

#集合类型操作符(所有集合类型) print u'联合|:联合(union)操作与集合的OR操作其实等价的,联合符号有个等价的方法,union()。' print s|t #交集(&):与集合AND等价,交集符号的等价方法是intersection() print s&t #查补(-):等价方法是difference() print s-t #对称差分(^):对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference() print s^t #注意:集合之间and,or """ >>> s1 and s2 set(['a', 'm', 'n'])   #取 s2 >>> s1 or s2 set(['i', 'b', 'e', 'g', 'n']) #取 s1 >>> """ #前面 的S是可变的集合,t是不可变集合,虽然存在t,但结果还是可变集合 #相反就结果不一样 #如果左右2个操作数类型是相同,即都是可变或者不可变,则产生结果是相同的,但如果左右2个操作数类型是不相同(左边是set),右边是 # (右边是frozenset),或者相反情况,则产生的结果类型与左操作数类型相同,注意:加号不是集合类型的操作符 # 如果s+t则出现一个typeerror错误 #只支持可变集合操作符 #(uion):update(|=) #这个更新方法从已《存在》的集合中添加(可能多个)的成员,与update()等价 print u'update' u=frozenset(s) s.update(set('pypi'))#s|=set('pypi') print s #retention/intersection update(&=):保留(或者次更新)操作保留与其他集合共有成员,与intersection_update()等价 s=set(u) s&=set('shop') print s #defference update(-=):对集合s与t进行差更新的操作s-=t,返回一个集合,该集合成员是集合s去除集合t元素中剩余元素,与differebce_update()等价 s-=set('shop') print s #symmetric defference update(^=)#对集合s和t进行对称差更新操作(s^=t),返回一个操作,该集合中的成员仅是原集合s或者仅是另一个集合t的成员,与symmetric_defference_update()等价 t=frozenset('bookshop') s^=t print s #集合内建函数 #len(),set(),froxenset() """set(),froxenset() 如果未提供任何参数,默认会生成一个集合,如果提供一个,则该参数必须是可迭代的,即一个序列或者迭代器,或者支持迭代的一个对象,比如文件或者字典 """ print set() print set([])

print set({}) print set('shop') print frozenset(['dog','cat']) f=open('a.txt','w') for i in range(5):     f.write('%d'%(i))

f.close() f=open('a.txt') print set(f)

python基础学习05(核心编程第二版)部分的更多相关文章

  1. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  2. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  3. Python核心编程(第二版)PDF

    Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...

  4. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

  5. Python核心编程第二版(中文).pdf 目录整理

    python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源  :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...

  6. 《python核心编程第二版》第7章习题

    7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答:dict1.update(dict2) 7–2. 字典的键.我们知道字典的值可以是任意的Python 对象,那字典的键又如何呢?请试 ...

  7. 面向对象——python核心编程第二版

    类与实例 类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息. class MyData(object): pass >>& ...

  8. python 核心编程第二版 课后习题 第11章

    11-3 函数.在这个练习中,我们将实现 max()和 min()内建函数. (a) 写分别带两个元素返回一个较大和较小元素,简单的 max2()核 min2()函数.他们应该可以用任意的 pytho ...

  9. 《python核心编程第二版》第8章习题

    8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...

随机推荐

  1. python lcd 时间显示

    #!/usr/bin/python # QStopWatch -- a very simple stop watch # Copyright (C) 2006 Dominic Battre <d ...

  2. BNU10806:请在此处签到

    每年圣诞,ZUN都会邀请很多人到幻想乡举行联欢,今年也不例外.在联欢前,所有人需要在自己的昵称旁签到(签全名),以示出席.然后ZUN 会把大家的签到表保存下来作为纪念,以激励来年努力工作.   昵称: ...

  3. 安装tcmalloc

    安装google-perftools:#tar zxvf google-perftools-1.6.tar.gz #cd google-perftools-1.6 #./configure#make# ...

  4. Hexo博客搭建图文教程

    准备 你需要准备好以下软件: Node.js环境 Git Windows 配置Node.js环境 下载Node.js安装文件: Windows Installer 32-bit Windows Ins ...

  5. using 关键字给类和名称空间指定别名

    1. using System; using System.Text; namespace DLL { public class Class1 { public void showStr() { Co ...

  6. javascript构造函数+原形继承+作用域扩充

    目前为止我认为这是最佳的声明对象的模式,将今天学到的东西写下 <script type="text/javascript"> function Constructor( ...

  7. 修改EF的默认约定模型的方式

    EF默认使用约定的模型,但是有时类不遵从约定,我们需要能够执行进一步的配置.对此有两种方法:数据注释和Fluent API 注释 class User { [Key] public int Key{ ...

  8. java 静态文件使用注解

    spring框架为我们代码的编写带来了极大的便利,特别是注解的使用.但是有个问题,当我们在静态文件中使用注解的时候,这个时候就会报错了.如以下代码: @Autowired private UserSe ...

  9. .net后台 Silverlight 页面 动态设置 ASPX 页面 控件的Margin值(位置设置)

    silverlight后台代码:using System.Windows.Browser;public Page1(){HtmlPage.RegisterScriptableObject(" ...

  10. JAVA与JSON的序列化、反序列化

    package com.linkage.app.memcache; import java.util.HashMap;import java.util.Map.Entry; import net.sf ...