Python中基本数据存储结构列表、元组和字典

来源:互联网 发布:fifaonline3刷球员软件 编辑:程序博客网 时间:2024/05/16 10:37

在Python的学习中我们看到Python有列表、元组和字典三种基本的数据存储结构,下面对着三种结构做一个总结

1. 列表(list)

列表在Python中是一个任意类型对象位置的相关有序集合,它没有固定大小,根据数据量的不同可以动态变化。可以对列表中的数据进行赋值、修改、添加、删除等操作。与C\C++中一维数组类似,其索引index是从0开始的而不是从1开始的。可以对列表进行索引、切片、分割等操作。
列表的分割通过设置索引的头下标和尾下标实现[头下标:尾下标],这样就可以截取列表中对应范围内的数值。列表也有其特殊性,列表可以从左向右进行索引,索引号默认从’0’开始,列表也可以从右向左进行索引,最右侧索引号尾’-1’,不要忘记’-‘,这表明了列表的索引方向;列表也可以混合存储整型、浮点型和字符串等类型的数据,如下:

>>> l=[1,'keith',3.1415]>>> l[1, 'keith', 3.1415]>>> l[0]1>>> l[-1]3.1415>>> l[1:2]['keith']>>> l[0:2][1, 'keith']>>> l[0:][1, 'keith', 3.1415]

也可以直接对两个列表进行’+’操作,如下:

>>> l=[1,'keith',3.1415]>>> l1=[1,'keith',3.1415]>>> l2=[2,'keith_bb',0.96]>>> l1+l2[1, 'keith', 3.1415, 2, 'keith_bb', 0.96]

Python标准库中提供了更多对列表进行操作的函数如:

  • list.len(): 求取列表中元素个数
  • list.append(x): 把元素x添加到列表的结尾
  • list.extend(L): 将一个给定列表中的所有元素都添加到另一个列表中
  • list.insert(i, x): 在指定位置i处插入一个元素x,需要注意的是元素会插入在原位置元素之前
  • list.remove(x): 删除列表中值为x的第一个元素,如果列表中没有这样的元素,就会返回一个错误。
  • list.pop([i]): 从列表的制定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回的将是列表中最后一个元素,元素随即将从列表中删除(pop([i])中表示元素i是可选的,在实际使用中不需要添加[],在Python的文档中也常遇到这样的问题)
  • list.index(x): 返回列表中第一个值为x的元素的索引,如果没有该元素则会返回一个错误
  • list.count(x): 返回x在列表中出现的次数
  • list.sort(cmp=None, key=None, reverse=False): 对列表中的元素进行排序,如果参数reverse设置为True则列表为倒序排列
  • list.reverse(): 列表倒序排列
  • del list[i]删除列表中给定的索引所对应的值,这点与remove方法有所不同,del进行删除操作后无返回值。del还可以从列表中删除切片、清空整个列表甚至删除整个变量
  • list.clear()从列表中删除所有元素,其效果等同与使用del删除整个列表元素
  • list.copy()对列表进行一个浅拷贝操作,等同于a[:]
>>> deque=['A','B','C']>>> deque.append('D')>>> deque.append('E')>>> deque.pop()'E'>>> del deque[0]>>> deque['B', 'C', 'D']>>> del deque[1:3]>>> deque['B']>>> del deque[:]>>> deque[]

2. 元组(tuple)

元组在Python中的应用不如列表和字典广泛,但是元组的一些特点也很有用处。元组数据特点:

  • 元组是任意对象的有序集合,元组与字符串和列表类似,是一个位置有序的对象的集合,可以嵌套到任何类别的对象中去
  • 通过偏移存取而不是键来访问,同列表一样可以使用索引、切片等操作
  • 属于不可变序列类型,不能对元组中的元素重新赋值,但可以进行组合和复制,运算后会生成一个新的元组

列表的声明需要用’[]’来说明,而元组则需要’()’,元组在输出时总是有括号的,以便于表达正确的嵌套结构。在输入时可以有或没有括号,不过经常括号都是必须的。元组和列表很类似,它们经常在不同的情况下使用。由于元组中元素不可被重新复制,这就决定了元组有很多特殊用途例如:(x, y)表示一个坐标对,在数据库中的员工记录等。通过包含不同种类的元素通过分拆和索引进行访问,如果是namedtuple的类型甚至可以通过对象属性进行访问。
可以通过一对空括号创建空元组,而在创建一个单元素的元组可以在值后面跟一个逗号如下:

>>> tuple_empty=()>>> tuple_single='hello',>>> tuple_single('hello',)>>> tuple_empty()

Python中提供的常用的元组操作函数如下:

  • tuple.len(): 计算元组中元素个数
  • tuple.index(x,[start,stop]): 返回元组中start到stop索引中第一个值位x的元素在整个列表中的索引,如果没有匹配的元素就会返回一个错误。
  • tuple.count(x): 返回元素x在元组中出现的次数
  • tuple.max(tuple): 返回元组中元素最大值
  • tuple.min(tuple): 返回元组中元素最小值
  • tuple(list): 将列表转换为元组
  • 由于元组中元素不可重新赋值,所以不可对元组中元素进行排序,如果使用sorted()函数对元组进行排序操作,则sorted()函数会首先将元组转换为列表之后再进行排序,排序后的结果为列表而非元组

在元组声明中可以嵌套列表,如下:

>>> tuple_list=('x','y',['a','b'])>>> tuple_list('x', 'y', ['a', 'b'])>>> tuple_list[2][0]=1>>> tuple_list('x', 'y', [1, 'b'])>>> tuple_list[2][1]=2>>> tuple_list('x', 'y', [1, 2])>>> tuple_list[0]=1Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment

3. 字典(dict)

字典在Python中非常有用,和列表与元组不同的是,列表与元组靠有序的index进行索引而字典是以关键字进行索引,关键字可以是任意不可变类型,通常用字符串或数值。所以如果元组值包含字符串和数字可以作为关键字,但如果它直接或间接的包含了可变对象,如嵌套列表,则不能作为关键字,不能用列表作为关键字。
理解字典最佳方式是吧它看做无序的 键:值 对(key:value)集合,同一个字典内键必须是互不相同的。一对大括号’{}’创建一个空的字典,初始化列表时,在大括号内放置一组逗号分割的键值对,这也是字典输出方式。
对一个字典执行list(d.keys())将会返回一个字典中所有关键字组成的无序列表,如果想要排序值需要使用sorted(d.keys()),可以使用in检查字典中是否存在某个关键字

>>> dic={'A':1, 'B':2, 'C':3}>>> dic{'B': 2, 'A': 1, 'C': 3}>>> dic={'A':3,'B':2,'C':1}>>> dic{'B': 2, 'A': 3, 'C': 1}>>> list(dic.keys())['B', 'A', 'C']>>> sorted(dic.keys())['A', 'B', 'C']

Python中常用字典操作方法:

  • dic.clear(): 删除字典内所有的元素
  • dic.copy(): 返回复制的字典
  • dic.fromkeys(seq,val): 创建一个新的字典,以序列seq中元素做字典的键,val为字典键所对应的初始值
  • dic.get(key,default=None): 返回指定键的值,如果值不在字典中则返回default值
  • dic.has_key(key): 和in一样,可以判断关键字是否在字典中,如果键在字典中返回true,否则返回false
  • dic.items(): 以列表返回可遍历的(键,值)元组数组
  • dic.keys(): 以列表返回一个字典所有键
  • dic.setdefault(key,default=None):和get()类似,但如果键不存在字典中,将将会在字典中添加键病将值设置位default
  • dic.update(dic2): 把字典dic2中的(键:值)对更新到dic,相当于将dic2中数据复制到dic中
  • dic.values(): 以列表返回字典中所有值
  • dic.pop(key): 删除一个键并返回它的值,类似于列表的pop,只不过删除的是一个键不是一个可选的位置
  • del:de函数同样试用字典,如del dic[key]删除键
  • 可对字典中的值进行修改,如:dic[key]=66

最后

Python中三种基本的数据存储结构已经说完了,但是并不能完全覆盖,像列表推导式之类的知识点可以简化Python代码,提高可阅读性。
本文主要参考Python官方教程、廖雪峰教程和知乎: https://zhuanlan.zhihu.com/p/25728802

1 0
原创粉丝点击