第七章 内置数据结构-元组、数组、集合、字典

在python中最常用的四个数据结构为,元组数组字典集合,在编写程序的时候,基本上都能碰到这四样东西。

内置数据结构是python中特有的一些属性,这些可能是你第一次见过的,后面会慢慢的接触到,不管是做什么项目,必须会用到他们,才能体现python的独特性。

元组

元组在这四个数据结构中是属于最基础的,为了程序的效率考虑,元组一旦创建了以后就不能够进行修改,很多人可能理解不了这个,认为元组不够灵活,但是在实际项目中编写代码时,经常会碰到这种情况,例如某一个函数返回的结果,并不能也没有必要去修改这个结果,最快速的方式是返回一个元组类型,这是最可取的一种方式。

元组使用小括号(),小括号里面可以包含各个元素,相当于组成一个简单的队列。

tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
访问元组

元组有自己的索引,通过索引可以遍历到各个数据。

>>> tup1 = ('physics', 'chemistry', 1997, 2000)
>>> print tup1[3]
2000
>>>
元组内置函数
cmp(tuple1, tuple2) 比较两个元组元素。
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(seq) 将列表转换为元组。

数组列表

基本上每一种编程语言都有自己的数组列表,用来存放一组数据,数组在创建了以后可以进行添加,删除等一些常见的操作,这是比元组来得自由得多,数组列表是最经常用到的。

数组列表函数&方法
list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置,索引从0开始
list.insert(index, obj) 将对象插入列表
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素,倒转
list.sort([func]) 对原列表进行排序

集合

python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并、交、差、对称差等。sets 支持 x in set、 len(set)、和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing(数字索引如[2]), slicing(如[1:3]), 或其它类序列(sequence-like)的操作。

集合一个重要的特性是不重复的元素集,即集合里的每个元素都是不同的,如果插入的集合中存在这个元素则没有元素增加,这种不重复,对于一些场景特别的时候,比如需要统计每天的新增用户,可能新增的用户有多次的访问,但只能取一次,使用set就非常的合适了。

set的集合操作,对于数据统计非常有用,非常方便。包括并集、交集、差集和对称差集,例如:

a = t | s # t 和 s的并集 

b = t & s # t 和 s的交集 

c = t – s # 求差集(项在t中,但不在s中) 

d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 

字典

字典(dictionary)是除列表之外python中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典由键和对应的值组成。字典也被称作关联数组或哈希表。基本语法如下:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict = {};

每个键与值必须用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。键必须独一无二,但值则不必;值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。

访问字典里的值
#!/usr/bin/python
dict = {'name': 'Zara', 'age': 7, 'class': 'First'}
print "dict['name']: ", dict['name']
print "dict['age']: ", dict['age']

来自您的鼓励

如果您感觉这一系列的教程,读后有点收获,并对知识有点了解,不妨小额捐助我一下,让我有动力继续写出更多好文章;或者在评论区留下你的意见。

所有评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。

还没有评论

撰写评论