目录
1. List 与 Tuple
1.1 List
1.2 Tuple
2. Dict和Set
2.1 Dict
2.2 Set
List类似于Java语言中的一维数组,但是区别在于,Python的List中可以包含不同数据类型的元素,List是有序的,允许重复值。
List的常见使用如下列代码所示:
1.list的访问
L = [95.5,85,59] #注意list可以同时存放不同数据类型的元素 print L[0] #下标从0开始 print L[1] print L[2] #注意不要越界 #list支持倒序访问 print L[-1] #倒序访问下标从-1开始,L[-1]即L[2] print L[-2] print L[-3] #注意不要越界
2.list中元素的增加与删除
L = ['Adam', 'Lisa', 'Bart'] L.append('Paul') #append()总是把新的元素添加到 list 的尾部。 L.insert(2,'Paul') #第一个参数是索引号,第二个参数是待添加的新元素: print L #['Adam', 'Lisa', 'Paul', 'Bart', 'Paul'] L.pop() #pop()方法总是删掉list的最后一个元素,并且它还返回这个元素 L.pop(1) #pop()方法给定参数会删除指定下标位置的元素 print L #['Adam', 'Paul', 'Bart']
3.list的切片
对于取list中的部分值的操作叫做切片,切片的方法如下:
L = ['Adam', 'Lisa', 'Bart', 'Paul'] print L[0:3] #结果为['Adam', 'Lisa', 'Bart'],如果第一个数字为0,可以省略,即L[:3],3的意思是取到3但是不包括3 #L[:] ,表示从头到尾: print L[::2] #第三个操作符意思是每N个取一个,2即隔一个取一个 #结果为['Adam', 'Bart'] #支持倒序切片 print L[-2:] #['Bart', 'Paul'] print L[:-2] #['Adam', 'Lisa'] print L[-3:-1] #['Lisa', 'Bart'] print L[-4:-1:2] #['Adam', 'Bart']
注:字符串、tuple也支持上述切片操作
tuple与list类似,区别在于tuple在创建值后就不能修改了,因此,它没有append、insert、pop等方法,但是访问方式和list相同,同时注意一下单个元素的tuple的创建
t = ('Adam', 'Lisa', 'Bart')
#与list的创建的区别在于()和[]
t = (1,)
#必须加上,才能创建单元素的tuple否则==1
“可变的tuple”
t = ('a', 'b', ['A', 'B']) #因为这个tuple中包含一个list元素,因此对list中的元素修改是可以的,这时tuple就是一个可变的tuple,但是其实它的元素并没有改变,详见下面图解 L = t[2] L[0] = 'X' L[1] = 'Y' #此时就改变了t中list元素的值,但是实际它的内存指向并没有变 t = ('a', 'b', ('A', 'B'))
tuple的多用
tuple在函数中有一些隐性的应用,如下所示
- 函数返回多个参数,实际上是返回了一个tuple
- 函数的可变参数*args其实也是一个tuple
tuple的切片操作和list相同
dict是包含key与value的数组,其中的key与value对应,key是不可重复的,利用key可以访问其value值。dict是无序的。
1.dict的访问
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d['Adam'] #使用key访问其value值,如果key不存在,会直接报错:KeyError。 #为了避免KeyError,有以下两种方法 if 'Paul' in d: print d['Paul'] #in可以判断dict中是否有这个key print d.get('Bart') #使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None
2.dict的特点
- 查询速度快,无论多大,查询速度都一样(代价是占用内存大,典型的用空间换时间策略)(同时也要求了key是不可重复的)
- 无序
- key元素必须是不可变的(list不能作为key)
3.dict的更新与遍历
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } d['Paul'] = 72 #如果key已存在,则更新value值,key不存在,增加key-value for key in d: print key , ':', d[key]
4.dict的迭代
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } sum1 = 0.0 sum2 = 0.0 for v in d.itervalues(): sum1 = sum1 + v for v in d.values(): sum2 = sum2 + v print sum/len(d) #这里主要讲一下itervalues()方法和values()方法的区别 #1. values() 方法实际上把一个 dict 转换成了包含 value 的list。 #2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存,实际上itervalues()方法返回的是一个迭代器的对象
#如果需要同时取key和value值,我们可以使用items()方法,类似于values(),也有对应的iteritems()方法 d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } sum = 0.0 for k, v in d.iteritems(): sum = sum + v print k,":",v print 'average', ':', sum/len(d)
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
#创建set
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
判断一个元素是否在set中速度很快,而且元素不重复,因此set通常应用于存储有效值的集合,便于判断值是否在该集合中。
set的遍历与更新
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) #tuple作为set的元素 for x in s: print x[0] , ":" , x[1] s = set(['Adam', 'Lisa', 'Paul']) L = ['Adam', 'Lisa', 'Bart', 'Paul'] #remove()需要判断元素是否在set中,add()不需要,如果已存在,则不继续添加 for x in L: if x in s: s.remove(x) else: s.add(x) print s