先从4者异同点说起。

相同点:都是一组多个数据

 

不同点:

1、写法不同

List:中括号[ ]包括的一组元素,如L=[1,2,3,4]

Tuple:小括号( )包括的一组元素,如T=(1,2,3,4)

Dict:大括号{ }包括的一组Key:Value元素,如D={'Mike':1,'Tom':2}

Set:用set方法初始化的一组List元素,相当于set( List ),如S=set([1,2,3,4]),显示的时候也是用大括号{ }

 

2、数据保存规则不同

List:元素可以是任何类型,也可以是List类型(访问方式同C语言中的二维数组,如L[2][0]),元素值可以修改

  L=[1,'2',[3,4]]

Tuple:元素可以是任何类型,只是元素值在初始化后便无法修改(Tuple中的List元素中的值可以修改)

  T=(1,'2',[3,4])

  空元组写为T=()

逗号','以和数学中的括号相区分,如T=(1,)

Dict:元素只能是Key-Value类型,写法为Key:Value,其中Key必须为不可变的类型,如字符串str,整数int,所以不能为List类型

  D={'Mike':1,'Tom':2,'Jim':3}

Set:元素值不允许有重复,初始化时会自动过滤掉重复的元素,元素值同样是不可变的类型,不能为List

S=set([1,1,4,3,2])
S
{1, 2, 3, 4}

 

3、数据操作规则不同

①访问

List与Tuple可以直接通过下标访问,下标0,1意义同C语言数组,下标也可以为-1,-2,……。-1表最后一个元素,-2表倒数第二个元素

L=[1,'2',[3,4]]
T=(1,'2',[3,4])

L[1]
'2'
T[2]
[3, 4]

 T[-1]
 [9, 4]

Dict可以通过[Key]方式访问;如果Key不存在,会出现KeyError

D={'Michel':1,'Tom':2,'Jim':3}
D['Jim']
3
D['Tim']
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'Tim'

 

如果想要访问一个不存在的Key时,不抛出KeyError,而是返回一个默认值。可以用collections模块下的defaultdict类

from collections import defaultdict

dd=defaultdict(lambda:'N/A')

dd['Key1']=1

dd['Key1']
1
dd['Key2']
'N/A'

普通的Dict,存储时Key是无序的,如果想要Key保持创建时的次序,可以用collections模块下的OrderedDict类

 

Set则不允许直接通过[下标]方式访问其中元素

②修改已有元素

List可以直接通过下标修改

L[1]=2
L
[1, 2, [3, 4]]

Tuple不允许修改元素,除非是其中的List元素的元素

T[2][0]=9
T
(1, '2', [9, 4])

Dict可以直接通过[Key]方式修改

D['Jim']=4
D
{'Michel': 1, 'Tom': 2, 'Jim': 4}

③添加新元素

List:两种;a、末尾添加,append方法;b、下标 i 处添加,insert方法,原下标 i 处元素后移一位

a、append(Ele)

L.append(7.6)
L
[1, 2, [3, 4], 7.6]

b、insert(i,Ele)

L.insert(1,'2.5')
L
[1, '2.5', 2, [3, 4], 7.6]

 

Tuple:不允许添加,除非是给其中的List元素添加,方法同List

T[2].append(7.6)
T
(1, '2', [9, 4, 7.6])

 

Dict:直接通过D[Key]=Value的方式添加

D['Leo']=5
D
{'Michel': 1, 'Tom': 2, 'Jim': 4, 'Leo': 5}

 

Set:add方法

S.add(5)
S
{1, 2, 3, 4, 5}

 

④删除已有元素

List:pop方法,返回值为删除的元素

a、删除末尾元素,直接pop(),没有参数

b、删除下标 i 处元素,pop( i )

L
[1, '2.5', [3, 4], 7.6]

L.pop()
7.6
L
[1, '2.5', 2, [3, 4]]

L.pop(1)
'2.5'
L
[1, 2, [3, 4]]

Tuple:只能删除Tuple中的List元素中的元素,方法同上

Dict:pop(Key),返回值为删除的Key对应的Value

D
{'Michel': 1, 'Tom': 2, 'Jim': 4, 'Leo': 5}
D.pop('Leo')
5

Set:remove(Key),没有返回值

S.remove(3)
S
{1, 2, 4, 5}

 

其他特性:

1、Dict通过Key找Value的算法是Hash算法,不是顺序读取,速度比列表List要快;由于速度快,所以占用空间比List大

2、Key必须是不可变类型,List是可变类型,而Tuple是不可变类型,所以Key可以是Tuple类型

3、最常用的Key类型是字符串str

 

一些方法:

Dict:

检查Key是否存在的方法:

1、in

格式:Key in D

返回布尔值,存在为True,否则为False

'K'in D
False

2、Dict的get方法,不存在时返回None或者自己指定的参数,存在时返回一个值(具体哪个值并不确定,我用了两个编译器测试了两次分别是1和2)

print(D.get('T'))
None
print(D.get('T',0))#自己指定不存在时的返回值
0

print(D.get('Tom',0)) #存在
2

 3、keys()

列出所有的key

d.keys()
dict_keys(['a', 'b', 'c'])

list(d.keys())
['a','b','c']