list、tuple、dict、set是python内置的四种数据类型。
一、 list
1. list即列表,是一种可变的有序的数据类型,也即其中的值是可以修改的,这一点很重要!list的定义方式很简单,举例: name=[‘sun’,’sui’,’jie’] 呢么name就是一个list。下面从以下几点来介绍list的特点。
1.1 内容。
list中的元素的数据类型可以是可变的,比如cah=[123,’def’,[‘a’,’f’]] 可以看到的是list是可以多级嵌套的,就像多维数组一样,索引的方式也与数组相同,后面说到。
空的list的表示方法是 cah=[]
1.2 查询。
采用下标查询,如name[0]=’sun’注意一下几点:
a. 下标从0开始,同C语言是一样的;当然matlab是从1开始的;
b. 可以倒序查询。如name[-1]代表的就是最后一个元素,name[-2]代表 的就是倒数第二个。
c. 上面提到的多级嵌套的话,cah[2][1]=’a’ 跟C中的数组相同。
d. 查询长度的话使用len()函数。
1.3 插入。
a. name.insert(1,’zhao’) 1是插入位置的下标号
b. name.append(‘li’) 这是直接在末尾插入的方式。
1.4 删除。
a. 如果是删除末尾的元素,name.pop()
b. 如果删掉中间的元素,name.pop(i) i是下标号
1.5 修改。
name[0]=’wang’ 即可完成修改。
二、 tuple(元组)
tuple与list最大的不同就在于tuple是不可修改的!所以与list相比较起来就更加安全些。tuple的定义方法也很简单。 num=(1,1,2),关于tuple中的有几点需要指明:
2.1 内容为空的话,同样是num=()
2.2 如果只有一个元素的话应该如何定义呢?num=(3) 这样的表示是不对的,python中约定这样的表示代表数字3,正确的表示方法是num(3,)加一个逗号!
2.3 如果一个tuple的内容为asd=(1,2,[‘a’,’b’]) ,此时我将list中的元素做如下修改: asd[2][0]=’d’,这是合法的!!
2.4 在2.3中可以看到,tuple的索引方式与list是相同的。
三、 dict
dictionary,字典,在其他语言中map的作用,采用键-值存储方式,简单说就是定义一个算式,输入“键”,这个算式就计算出存储位置,然后就可以直接取出来这个“值”。这个算式叫做“哈希公式”。从上边的原理描述中就可以看到dict类型与list的两个很重要的不同就是:
dict类型的搜索速度很快,但是占用的内存也更多,是一种空间换时间的存储方式;而list与之恰好相反。
dict是一种无序的存储!而list和tuple是有序的。
下面就开始dict的介绍:
3.1 dict的定义。
class={‘sui’:56,’sun’:34,’li’:65} 键和值之间用冒号隔开
3.2 检索。
class[‘sui’]
如果说’sui’并不是class中的一员,那么这个语句会报错的,有两种方法来检测这一点:
‘sui’ in class 如果返回值为TRUE,说明’sui’在class中
class.get(‘sui’,’没有啊’) 如果class中没有’sui’,则会返回’没有啊’
3.3 修改
class[‘sun’]=34
3.4 插入
class[‘li’]=34 直接写一个新的就可以,如果有相同的,由于键不可以重复,所以会直接覆盖!
3.5 删除
class.pop(‘sui’)
最后,注意一点,由于dict是每一个键对应一个存储位置,所以键的数据类型一定要是不可变的,如整数、字符串等,不可以是list!
四、 set
set可以看做是dict的一种简单的变体,唯一的区别是set只有键,没有值。所以,set其实就是一堆无序列不重复的数。不重复是它的重要特征。
4.1 创建
set要借助list完成创建,比如输入:name=set([‘a’,’d’,’s’]),则name={‘a’,’d’,’s’}
4.2 增添与删减
由于set是无序的,所以像insert、pop这种使用于有序的词是不适用的,set的增减使用的是name.add(‘e’) name.remove(‘a’)
4.3 运算
由于两个每一个set都是没有重复元素的,所以他们可以看成集合进行运算。如 & |