【Python初学】常见集合的使用和区别

目录

1. List 与 Tuple

1.1 List

1.2 Tuple

2. Dict和Set

2.1 Dict

2.2 Set 


1. List 与 Tuple

1.1 List

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也支持上述切片操作

1.2 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相同 

2. Dict和Set

2.1 Dict

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()方法返回的是一个迭代器的对象<dictionary-valueiterator> 
#如果需要同时取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)

 

2.2 Set 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值