learning python 0309


# dict 字典/map:使用键值对key-value存储,具有极快的查找速度

# 对比list的做法:给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
# names = ['Alice','Bob','Tank']
# scores = [95, 75, 85]

# dict实现
d = {'Alice':95,'Bob':75,'Tank':85}
print(d['Alice'])

d['Adam'] = 67
print(d)

# 一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
d['Jack'] = 90
print(d)
d['Jack'] = 88
print(d)

# 如果key不再就会报错
# print(d['Shirley'])

# 通过in判断key是否存在
print('Shirley' in d)

# get()方法,如果key不在,可以返回None,或者自己指定的value
print(d.get('Shirley'))
print(d.get('Lin', False))
print(d.get('Lin', -1))

# pop(key) 删除一个key,对应的value从dict中删除
d.pop('Jack')
print(d)

# 请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
# dict是用空间来换取时间的一种方法。

#和list比较,dict有以下几个特点:
# 查找和插入的速度极快,不会随着key的增加而变慢;
# 需要占用大量的内存,内存浪费多。
# 而list相反:
# 查找和插入的时间随着元素的增加而增加;
# 占用空间小,浪费内存很少。

# dict的key必须是不可变对象。
# 这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变
# list是可变的,就不能作为key


# set 也是一组key的集合,但不会存储value。由于key不能重复,所以,在set中,没有重复的key。
s = set([1,1,2,2,3,3])
print(s)
# 显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

# add(key) 在set中加入元素
s.add(4)
print(s)
s.add(4)
print(s)

# remove(key) 删除元素
s.remove(4)
print(s)

# set可以看成数学意义上的无序和无重复元素的集合
# 两个set可以做数学意义上的交集、并集等操作
s1 = set([1,2,3])
s2 = set([2,3,4])
intersection = s1 & s2
print(intersection)
union = s1 | s2
print(union)
#set和dict的唯一区别仅在于没有存储对应的value,但是set的原理和dict一样,所以同样不可以放入可变对象
# 因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

# 再议不可变对象
a = 'abc'
print(a.replace('a','A'))
print(a)

a = 'abc'
b = a.replace('a','A')
print(b)
print(a)

# str虽然有replace操作,但str是不可变对象,而a、b是变量

声明:自在独行|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - learning python 0309


海阔凭鱼跃,天高任鸟飞