python入门6...
时间:2010-08-15 来源:hx_jinqiang
#20100813
#列表与字典
#可以在原地修改,也可以按需求增长或缩短,而且可以包含任何种类的对象或者被嵌套。
#列表时Python中最具有灵活性的有序集合对象类型。与字符串不同的是,列表可以包含任何种类的对象。
#与字符串不通,列表时是可改变对象,它们都支持在原处修改的操作,可以通过指定的偏移值和分片、列表方法调用、删除语句等方法来实现
#列表是:任意对象的有序集合,通过偏移量读取,可变长度、异构以及任意嵌套,属于可变序列的分类,对象引用数组
'''
常用列表常量和操作
操作 解释
L1 = [] 一个空的列表
L2 = [1,2,3,4] 四项:索引为0-3
L3 = ['abc',['def','ghi']] 嵌套的子列表
L2 = [i] 索引
L3 = [i][j] 索引的索引
L2 = [i:j] 分片
len(L2) 求长度
L1 + L2 合并
L2 * 3 重复
for x in L2 迭代
3 in L2 成员关系
L2.append(5) 方法
L2.extend([5,6,7]) 增长
L2.sort() 排序
L2.index(9) 插入
L2.insert(I, X) 插入
L2.reverse() 反转
del L2[k] 裁剪
del L2[i:j] 分片裁剪
L2.pop()
L2.remove(2)
L2[i:j] = []
L2[i] = 1 索引赋值
L2[i:j] = [11,12,13]
range(4) 生成整数列表/元组
xrange(0,4)
L4 = [x**2 for x in range(5)] 列表解析
'''
L1 = []
L2 = [1,3,2,4]
print L2
print L2[1]
print L2[:2]
print L1 + L2
L2.append(5)
print L2
#在末端插入一个或多个元素
L2.extend([7,6,8])
print L2
#排序
L2.sort()
print L2
print len(L2)
for x in L2:
print x
print 5 in L2
L2.index(1)
print L2
L2.index(8)
print L2
#在某个元素后面插入新值
L2.insert(1,9)
print L2
L2.insert(8,10)
print L2
#反转,并不是反向排序。也非降序
L2.reverse()
print L2
del L2[0]
print L2
del L2[:3]
print L2
#删除元素的应用;0位第一个元素,一次类推,默认pop()为最后一个元素
L2.pop(3)
print L2
#L2.pop(1)
#print L2
#删除指定的元素
L2.remove(5)
print L2
L4 = [x**2 for x in range(5)]
print L4
#"+"操作和字符串中的一样,注意:"+"两边必须是相同类型的序列,否则运行时会出现类型错误
print str([1,2,3]) + "34"
#原地修改列表
#由于列表时可变的,它们支持实地改变列表对象的操作。
#当使用列表的时候,可以将它赋值给一个特定项(偏移)或整个片段(分片)来改变它的内容
L = ['sapm','Spam','SPAM']
print L
L[0] = 'jinqiang'
print L
L[0:2] = ['xu','jin']
print L
#索引和分片的赋值都是原地修改,它们对列表进行直接修改,而不是生成一个新的列表作为结果。
#与字符串相同,Python列表对象也支持特定类型方法调用。
L.append('tom')
print L
L.sort()
print L
L.extend(['hen','wei','da'])
print L
L.pop()
print L
L.reverse()
print L
#可以用del语句在原处删除某项或某片段
del L[0]
print L
del L[0:2]
print L
#字典:除了列表外,字典也许是Python之中最灵活的内置数据结构类型。
#1、列表可以看做有序的对象集合。
#字典是无序的集合
#2、区别:字典中的元素是通过键来取的,列表时通过偏移存取。
#3、可变长、异构、任意嵌套:与列表相似,字典可以在原处增长或缩短。它们可以包含任何类型的对象,而其它们支持任意深度的嵌套(可以包含列表和其它字典等)。
#4、属于可变映射类型
#5、对象引用表(哈希表)
#字典描述:”键:值(key,value)"的形式写出的,用逗号隔开,用大括号括起来,一个空字典就是一个大的空括号,而字典可以作为另一个字典中的某一个值被嵌套
#常见字典常量和操作
'''
操作 解释
D1 = {} 空字典
D2 = {'sapm':2,'eggs':3} 两项目字典
D3 = {'food':{'ham':1,'egg':2}} 嵌套
D2['eggs'] 以键进行索引运算
D3['food']['ham']
D2.has_key('eggs') 方法
'eggs' in D2 成员关系
D2.keys() 键列表
D2.values() 值列表
D2.copy 复制
D2.get(key,default) 默认
D2.update(D1) 合并
D2.pop(key) 删除
len(D1) 长度(存储元素的数目)
D2[key] = 42 新增/修改键
del D2[key] 删除键
'''
d2 = {'spam':2,'ham':3,'eggs':1}
print d2
#通过建来进行索引操作
print d2['spam']
print d2
print len(d2)
#字典的has_key()方法以及in成员关系操作符提供了键存在与否的测试方法:
print d2.has_key('ham')
#keys方法能返回字典中所有的键,将他们收集在一个列表中。
print d2.keys()
#字典方法提供了多种工具,values和items方法分别返回字典的值列表和(key,values)对元组
print d2.values()
print d2.items()
#原地修改字典
#通过"键",修改"值"
d2['ham'] = ['grill','bake','fry']
print d2
#del语句,它删除作为索引的键相关联的元素
del d2['eggs']
print d2
#往字典里新增元素
d2['username'] = 'alice'
print d2
#get使用方法;
print d2.get('username')
print d2.get('uhah')
#update 合并,它把一个字典的键和值合并到另一个,盲目地覆盖相同键的值
print d2
d3 = {'job':'tech','eage':25}
d2.update(d3)
print d2
#pop方法能够从字典中删除一个键并返回它的值,类似于列表的pop方法
print d2.pop('eage')
print d2
#语言表:生成一张表格,把程序语言名称(键)映射到它们的创造者(值)。你可以通过语言名称索引来读取语言创造者的名字。
table = {'python': 'alice',
'bash': 'bob',
'tcsh': 'david'}
print table
language = 'python'
creator = table[language]
print creator
print table.keys()
print table['python']
for lang in table.keys():
print lang,'\t',table[lang]
#字典用法的注意事项:
#1、序列运算无效,字典是映射机制,不是序列。因为字典元素没有顺序的概念,类似有序合并和分片这样的运算是不能用的。
#2、对新索引赋值会添加麻烦。当你编写字典常量时(此时的键是嵌套于常量本身的),或者向现有字典对象的新键赋值时,都会生成键。最终结果是一样的
#3、键不一定总是字符串,可以是整数、类实例对象也可以用作键。
#字典用于实现稀疏数据结构:
matrix = {}
matrix[(2,3,4)] = 88
matrix[(7,8,9)] = 99
x = 2;y = 3;z = 4
print matrix[(x,y,z)]
print matrix
#避免missing-key错误,读取不存在的键的错误在稀疏矩阵中很常见,不希望程序因为这一错误而被关闭。
#1、在if语句中预先对键进行测试
#2、可以使用try语句明确地捕获并修复这一异常
#3、用get方法为不存在的键提供一个默认值
if matrix.has_key((2,3,6)):
print matrix[2,3,6]
else:
print 0
print matrix.get((2,3,4),0)
print matrix.get((2,3,6),0)
#get方法时最简洁的。
rec = {}
rec['name'] = 'alice'
rec['age'] = 25
rec['job'] = 'trainer/writer'
print rec
print rec['name']
#嵌套字典
alice = {'xingqu':'baskball',
'shanchang':'changpao',
'home':{'state':'CCCC0','shengfen':'beijing'}
}
print alice