python有四种内置的数据结构,分别为


列表(List)


元组(Tuple)


字典(Dictionary)


集合(Set)



以下分别对这四种结构进行介绍和举例:


1.列表:列表就像日常中的事物清单,清单上列出我们要做的事情,同时我们可以修改清单的内容,或增加,或减少,也就是说列表是可以变化的。列表的内容使用方括号[],比如定义了一个购物清单


shopping_list = ['fish','rice','apple','bear']


列表推导来快速生产列表。所谓推导,就是根据已有的数据,对其进行遍历获取之后生成到新的数据机构中。


比如已知一个字符串,我们可以利用列表推导生成该字符串对应的大写的字符列表


str = 'abc'


char.upper() for char in str]


for char in upper_str:


print(char)



结果


A


B


C


生成器表达式生成list,语法和列表推导差不多,只不过把方括号【】换成圆括号(),比如


>>> upper_str=list(char.upper() for char in str)


>>> upper_str


['A', 'B', 'C']


2.元组:用于保存多个对象,是不能修改的,不能像列表一样进行添加等动作。元组一般用括号()进行内容的封装,也可不用,但是一般推荐用括号。 比如 定义


fruit = ('apple','banana')


new_fruit = ('grape',fruit)


我们可以用生成器表达式快速生成元组,比如



>>> str = 'abc'


>>> tuple_str = tuple(s for s in str)


>>> tuple_str


('a', 'b', 'c')



我们可以将元组合列表进行结合,比如定义一组学生的信息


# coding=utf-8


student_info = [('class1','张三'),('class2','李四'),('class2','王五')];


for student in student_info:


print('班级:%s,姓名:%s'%student);


结果:


班级:class1,姓名:张三


班级:class2,姓名:李四


班级:class2,姓名:王五


如果我们要忽略掉其中的一个数据,可以用占位符_ 进行替换,比如上面的例子中,我们只要提取学生姓名,那么可以这样操作


for _,name in student_info:


print('姓名:%s'%name);



结果是这样:


姓名:张三


姓名:李四


姓名:王五


拆包,拆包的过程中可以进行 嵌套,比如我们定义几个地址,包括地名,人口,经纬度,



area_info = [('area1',44,(23,134)),('area2',899,(56,90)),('area3',245.4,(-12,-34))]


print('{:8} | {:^12} | {:^12} | {:^12}'.format('城市','人口','经度','纬度'))


fmt = '{:5} | {:9.4f} | {:9.4f} |{:9.4f}'


for city,population,(latitude,longtitude) in area_info:


if population>=100:


print(fmt.format(city,population,latitude,longtitude))



结果:


城市 | 人口 | 经度 | 纬度


area2 | 899.0000 | 56.0000 | 90.0000


area3 | 245.4000 | -12.0000 | -34.0000



3.字典:就是一个key对应一个value,这个对应关系必须是唯一的。用法是将大括号{}将他们包起来,key和value用冒号:进行关联,用逗号,将多个键值进行分割,比如 dict = {key1:value1,key2:value2},help(dict)查看字典的更多信息


以下是一个通讯录的例子


phonebook ={


'jack':'13511111111',


'jone':'13855555555',


'jay':'150777777777'


}



print('jack phone number',phonebook['jack'])


#遍历


for name,phone in phonebook.items():


print(name,phone)



#删除


del phonebook['jay']



#增加


phonebook['linda'] = '18011119999'



#判断


if 'linda' in phonebook:


print('linda phone number is',phonebook['linda'])


字典推导来快速初始化字典。字典推导可以从以键值对为元素的可迭代对象中构建字典。我们从一个装有学生分数的列表中构建一个字典


>>> student_score = [('linda',67),('richar',89),('jack',70)]


score:name for name ,score in student_score}


>>> score_name


{89: 'richar', 67: 'linda', 70: 'jack'}


for name,score in student_score 相当于从列表中找出所有的键值对,至于 score:name


>>> name_score = {name:score for score,name in score_name.items()


... if score>70}


>>> name_score


{'richar': 89}



4.集合:就是对象的无序集合,当我们不关注对象的存在顺序,只关心是否存在时就用集合。和java中的set一样,集合可以用于去重。


>>> list = ['spark','hadoop','java','spark','storm']


>>> set(list)


set(['spark', 'java', 'hadoop', 'storm'])


集合推导来快速生成集合


>>> str='abcaabcd'


>>> s={char for char in str}


>>> s


set(['a', 'c', 'b', 'd'])


我们可以对集合进行很多操作,详细方法可以用 help(set)查看