list,tuple,dict,set是Python内置的四种数据类型,有些在外观上有些类似,所以在这里总结一下这四者的特征和不同,方便日后使用。
List:就是最常用的有序集合,示例代码:
l = ["Leo","Leon","Lee"]
print l
#该步骤为创建list,输出值为:['Leo', 'Leon', 'Lee']
print l[0]
#该步骤为根据索引0查看list的某一值,输出值为:Leo
print l[-1]
#该步骤为查看list的最后一个值,输出值为:Lee
l.append("Li")
print l
#该步骤为在list最后添加一个新的值Li,输出值为:['Leo', 'Leon', 'Lee', 'Li']
l.insert(0,'Micheal')
print l
#该步骤为在索引0处添加一个新的值Micheal,然后原索引0及其后面的值都往后移一位,输出值为:['Micheal', 'Leo', 'Leon', 'Lee', 'Li']
l.pop()
print l
#该步骤为删除list的最后一项,输出值为:['Micheal', 'Leo', 'Leon', 'Lee']
l.pop(2)
print l
#该步骤为删除list中索引为2的那一项,输出值为:['Micheal', 'Leo', 'Lee']
l[2]='Li'
print l
#该步骤为将索引为2的值修改为Li,输出值为:['Micheal', 'Leo', 'Li']
以上代码已经包含了List的常见操作,总结一句话就是:List是一个有序的,可以修改删除的集合。
Tuple:翻译过来就是元组的意思,与list相似,也是有序的,只不过tuple一创建完,就不可以再修改和删除了。示例代码:
t = ('Li','Lee','Leo','Leon')
print t
#该操作是创建一个tuple,输出值为:('Li', 'Lee', 'Leo', 'Leon')
print t[1]
#通过索引将索引为1的值输出,输出值为:Lee
print t[-1]
#找出tuple的最后一个值,输出值为:Leon
t1 = (1)
t2 = (1,)
print t1
#1
print t2
#(1,)
下面我们来对tuple做一些总结:
创建tuple时,用的是(),而list用的是[]
tuple可以像list那样,通过索引来查找某一个值,但是并不能用append,pop,或者直接用类似t(1)='Micheal'的方式对tuple进行数据上的修改
tuple在创建单个元素是,需要在后面加上一个逗号,因为()既可以用来表示tuple,也可以用来表示运算时的优先级,所以需要在单个元素后加个逗号,以示区分。多元素时,在最后加不加逗号都不会对tuple产生影响
有一种情况下,tuple看上去是可以改变的。那就是在tuple内部存一个list,在这种情况下,list内是可以发生变化的,因为tuple只是指向了这个list,只要你不修改这个指向,list怎么变都可以,在tuple看来,它仍然是不变的。
dict:dict其实是dictionary的缩写,翻译过来就是字典。用Java的话来说,它就是一个键值对的集合。示例代码:
d = {'Lee':100,'Leon':99,'Li':98}
print d
#该步骤是创建一个dict,输出值为:{'Lee': 100, 'Leon': 99, 'Li': 98}
print d['Lee']
#该步骤是通过key来获取某个dict的值,输出值为:100
if 'Li' in d:
print d['Li']
#该步骤先判断了Li这个key存不存在于d中,如果存在才输出Li的值,这样会更安全一些,输出值为:98
print d.get('Li')
#该步骤与上面的先判断后输出是等价的,get方法会先判断d中是否存在Li,如果存在则返回其值,如果不存在则返回None,输出值为:98
d['Leon'] = 97
d['Leo'] = 96
print d
#如果该key存在,则修改该key对应的值,如果key不存在,则添加进d中,输出值为:{'Leo': 96, 'Lee': 100, 'Leon': 97, 'Li': 98}
for key in d:
print key
#循环输出d中的所有key值,输出值为:Leo
#Lee
#Leon
#Li
dict的一些特征:
查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
dict存储的key-value序对是没有顺序的。
set:有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。示例代码:
s = set(['A','B','C','C'])
print s , len(s)
#该步骤是创建一个set,当set中有重复项,会自动去除重复项,输出值为:set(['A', 'C', 'B']) 3
s1 = set([('Lee', 95), ('Leon', 98), ('Li', 99)])
for x in s1:
print x[0]+':',x[1]
#循环输出s1中的值,输出值为:Leon: 98
#Li: 99
#Lee: 95
s.add('D')
s.add('D')
print s
#当add中的值不存在于s中,则会将其添加进s中,如果已存在,则会被忽略,不会报错,输出值为:set(['A', 'C', 'B', 'D'])
s.remove('A')
print s
#当remove中的值存在于s中,则会将该值从s中去除,如果不存在则会报错,输出值为:set(['C', 'B', 'D'])
总结一下:
list是一个可修改可删除的有序集合。
tuple是一个不可修改不可删除的有序集合。
dict是一个可修改可删除的无序键值对集合。
set是一个可修改可删除但不可重复的无序集合。