Python中,有3种内建的数据结构:列表、元组和字典。


1.List列表

list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的

这个是python里面用的最多最常用的数据类型,可以通过下标来访问,可以理解为java或者c里面的数组.但是功能比数组强大n倍,list可以放任意数量的python对象,可以是字符串,字符,整数,浮点等等都可以,而且创建,添加,删除也很方便.


1)创建list //list内部的对象可以是字符串,字符,数字,支持混搭

aList = ['apple', 100, 0.01, 'banana','A','B','C']


2)访问list //直接通过下标去访问

>>>print(aList[0])

'apple'


3)列表的切片 //通过切片来取列表中的一部分

>>>print(aList[4:6])

['A', 'B']


4)列表的嵌套 //列表支持嵌套,就是列表里面可以套列表,甚至套字典,元组等

bList=[100,200,['aaa','bbb','ccc']]

>>>print(bList[2][0])

aaa


5)列表的插入//内置函数append,insert


python数据结构之列表、元组和字典用法_第1张图片

6)列表的删除//内置remove,pop函数


python数据结构之列表、元组和字典用法_第2张图片

7)列表支持*,+

list1=[1,2,3]

list2=[100,200,300]

list3=list1+list2

print(list3)

>>>[1, 2, 3, 100, 200, 300]


list4=['a','b','c']

list5=list4*3

print(list5)

>>>['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']


8)列表的排序//内置了sort函数非常方便,通过传入reverse为True或者False来升序或者降序排列


python数据结构之列表、元组和字典用法_第3张图片

9)计算列表的长度 //利用内置函数len()

aList=[1,2,3,4,5]

print(len(aList))

>>>5


10)计算列表里面的最大值,最小值

aList=[1,2,3,4,5]

print(min(aList))

>>>1

print(max(aList))

>>>5


当然你若要想知道,最大的前2个数,或者最小的2个数,需要用heapq模块,以后在python黑魔法里面会详细讲.


11)列表的扩展 //用内置extend函数,看起来和+差不多,其实区别在于+是返回一个新的列表,而extend是直接修改了列表

aList=[1,2,3]

b=[4,5,6]

aList.extend(b)

print(aList)

>>>[1, 2, 3, 4, 5, 6]


12)查找列表中某一个元素的索引//内置函数index

aList=['This','is','a','very','good','idea']

print(alist.index('very'))

>>>3


13)统计某个元组在列表里面的次数,内置函数count

aList=['to','do','or','not','to','do']

print(aList.count('to'))

>>>2


以上就是常见的list的用法,注意list是支持重复元素的,就是list里面可以有2个同样的元素

比如:

cList=[100,200,'apple','peach','apple']

print(cList)

>>>[100, 200, 'apple', 'peach', 'apple']

后面的教程会讲如何一行代码去掉重复的元素




2.元组

元祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号分隔的项目定义。元组通常用在使语句或用户定义的函数能够安全的采用一组值的时候,即被使用的元组的值不会改变。元组可以嵌套

元组和列表一样,也是一种序列,唯一的不同在于不能修改

1)元祖的创建

aTuple=(1,2,3)

print(aTuple)

>>>(1, 2, 3)

有一点要注意,当元组里面只有一个元素的时候,一定要加, 比如(100,)


2)元组的用法和列表一模一样

很多初学者会问,既然用法和列表一样,为啥还要发明元组,原因在于

  • 有一些特殊的场合需要不可变序列,比如后面会讲道的数据结构字典,必须要用不可变序列作为键值,而列表不行。


  • 有一些内建的函数的返回值,也必须是元组.





3 字典
字典类似于你通过联系人名称查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。
 
    键值对在字典中以这样的方式标记:d = {key1 : value1, key2 : value2 }。注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。另外,记住字典中的键/值对是没有顺序的如果你想要一个特定的顺 序,那么你应该在使用前自己对它们排序

基本语法:

dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}

 

技巧:

字典中包含列表:dict={'yangrong':['23','IT'],"xiaohei":['22','dota']}

字典中包含字典:dict={'yangrong':{"age":"23","job":"IT"},"xiaohei":{"'age':'22','job':'dota'"}}


增加字典元素

>>> nameinfo={}

>>> nameinfo['a1']='yangrong'   #若字典里有a1主键,则覆盖原来的值,没有,则添加

>>> nameinfo

{'a1': 'yangrong'}

 

遍历字典主键与键值

>>> for k, value innameinfo.items():

...  print k,value

...

a1 yangrong

 

查看字典所有主键

>>> dict = {'ob1':'computer','ob2':'mouse', 'ob3':'printer'}  

>>>

>>>

>>> dict.keys()

['ob2', 'ob3', 'ob1']

 

判断字典中是否有该主键

>>> dict.keys()

['ob2', 'ob3', 'ob1']

>>> dict.has_key('ob2')     #'ob2' in dict

True

>>> dict.has_key('ob4')

False

 

也有人用循环方法来判断

for key in dict.keys():

但是这种方法毕竟不够简洁,

查看字典所有键值内容

>>> dict = {'ob1':'computer','ob2':'mouse', 'ob3':'printer'}

>>> dict.values()

['mouse', 'printer', 'computer']

 

 

列出所有项目

>>> dict.items()

[('ob2', 'mouse'), ('ob3', 'printer'),('ob1', 'computer')]

 

清空字典

>>> dict.clear()

>>> dict

{}

 

拷贝字典

>>> dict

{'ob2': 'mouse', 'ob3': 'printer', 'ob1':'computer'}

>>> a=dict

>>> a

{'ob2': 'mouse', 'ob3': 'printer', 'ob1':'computer'}

>>> b=dict.copy()

>>> b

{'ob2': 'mouse', 'ob3': 'printer', 'ob1': 'computer'}

 

比较字典

>>> cmp(a,b)

首先比较主键长度,然后比较键大小,然后比较键值大小,(第一个大返回1,小返回-1,一样返回0

 

更新字典

>>>dict={'yangrong':{"age":"23","job":"IT"},"xiaohei":{"'age':'22','job':'dota'"}}

>>> dict

{'xiaohei':set(["'age':'22','job':'dota'"]), 'yangrong': {'age': '23', 'job':'IT'}}

 

>>> dict['xiaohei']=111        #修改一级字典

>>> dict

{'xiaohei': 111, 'yangrong': {'age': '23','job': 'IT'}}

>>> dict['yangrong']['age']=25    #修改二级字典

>>> dict

{'xiaohei': 111, 'yangrong': {'age': 25,'job': 'IT'}}

 

>>> dict={'yangrong':['23','IT'],"xiaohei":['22','dota']}

>>>dict['xiaohei'][1]="dota2"         #修改字典中列表某项,1是代表列表中第2个字符串。

>>> dict

{'xiaohei': ['22', 'dota2'], 'yangrong':['23', 'IT']}  

 

 

删除字典元素

>>> dict

{'xiaohei': ['22', 'dota2'], 'yangrong':['23', 'IT']}

>>> del dict['xiaohei']          #删除xiaohei键值

>>> dict

{'yangrong': ['23', 'IT']}

 

 

>>> dict

{'yangrong': ['23', 'IT']}

>>>

>>> del dict['yangrong'][1]    #删除yangrong主键的每2字值

>>> dict

{'yangrong': ['23']}

 

删除整个字典

>>> dict

{'yangrong': ['23']}

>>> dict.clear()  #del dict

>>> dict

{}

 

 

将字符串切分为列表

>>> s="hello world bye"

>>> s.split()    #用于把有规律的文本,读取出来后,使用列表进行修改,再写入文件。

['hello', 'world', 'bye']

 

将列表转换为字符串

S.split(str, ' ')  #stringlist,以空格切分


存储字典(pickle序列化)

#需导入pickle模块  import pickle

 

把字典内容存入文件

f=file('data.txt','wb')   #新建文件data.txt'wb'b是打开块文件,对于设备文件有用

pickle.dump(a,f)      #a序列化存入文件

f.close()

 

把内容读入字典(反序列化)

a=open('data.txt','rb')    #打开文件

print pickle.load(a)      #把内容全部反序列化