python内置的 三种常用数据结构 : 列表 (list )、元组( tuple )和 字 典( dict )。列表和元组比较相似,它们都按顺序保存元素 , 每个元素都有自己的索引,因此列表和元组都可通过索引访问元素 。二 者的 区 别 在 于元组是不可修改的,但列表是可修改的 。 字典则以 key-value的形式保存数据 。
序列:
指的是 一 种包含多项数据的数据结构,序列包含的 多 个数据项(也叫成员)按顺序排列,可通过索引来访问成员 。常见序列类型包括字符串 、列表和元组等
创建列表和元组:
创建列表使用方括号 , 创建元组使用圆括号,并在括号中列出元组 的元素,元素之间以英文逗号隔 开
my_list = ['crazyit',20,'python']
my_tuple = ('crazyit',20,'python')
只要不涉及改变元素的操作 ,列 表和元组的用法是通用的。列表的元素相当于 一个变量 ,程序既可使用它的值,也可对元素赋值;元组的元素则相当于一个常量 , 程序只能使用它的值 , 不能对它重新赋值。
子序列:
[start : end : step] step 表示步长,因此 step 使用负数没有意义。
加法,乘法:
列表和元组支持加法运算,加法的和就是返回一个列表或元组,其包含两个列表或元组的元素 。需要指 出的是,列 表只能和列表相加;元组只能和元组相加;元组不能 直接和列 表相加。
in 运算符:
长度、最大值和最小值:
内置的 len()、 max()、 min()全局函数来获取元组或列表的长度、最大值和最小值 。
序列封包和序列解包:
程序把多个值赋给一个变量时, Python 会自动将多个值封装成元组。这种功能被称为序列封包 。
程序允许将序 列 (元组或列表等)直接赋值给多个变量,此时序列的各元素会被依次赋值给每个变量(要求序列的元素个数和变量个数相等)。这种功能被称为序列解包。
#tuple封包
values = 10,20,30
print(values)#(10,20,30)
print(type(values))#<class 'tuple'>
#tuple解包
a_tuple = tuple(range(1,10,2))
a,b,c,d,e = a_tuple
print(a,b,c,d,e)#1 3 5 7 9
#list解包
a_list = ['fkit', 'crazyit']
a_str, b_str = a_list
print(a_str, b_str)#fkit crazyit
#实现交换变量的值
x,y,z = 10,20,30
x,y,z = y,z,x #20 30 10
#以只解出部分变量,剩下的依然使用列表变 量保存
#在左边被赋值 的 变量之前添加“*”,那么该变量就代表 一 个列表
first, decod ,*rest = range(10)
print(first)#0
print(rest)#[2,3,4,5,6,7,8,9]
列表:
list() 函数可用于将元组 、区间 ( range )等对象转换为列表。
>>> a_tuple = ('1',20,-1.2)
>>> a_list = list(a_tuple)
>>> a_list
['1', 20, -1.2]
>>> a_range = range(1,5)
>>> a_range
range(1, 5)
>>> b_list = list(a_range)
>>> b_list
[1, 2, 3, 4]
>>> c_list = list(range(4,20,3))
>>> c_list
[4, 7, 10, 13, 16, 19]
Python 也 提供了一个 tuple() 函数 , 该 函数可用 于将列表、 区 间 ( range )等对象转换为元组 。
增加列表元素append() extend():
append ()方法既可接收单个值,也可接收元组、列表等 ,但该方法只是把元组 、列 表当成单个元素 , 这样就会形成在列表中嵌套列表、嵌套元组的情形 。
>>> a_list = ['crazyit',20,-2]
>>> a_list.append('fkit')
>>> a_list
['crazyit', 20, -2, 'fkit']
>>> a_tuple = (3.4,5.6)
>>> a_list.append(a_tuple)
>>> a_list
['crazyit', 20, -2, 'fkit', (3.4, 5.6)]
>>> a_list.append(['a','b'])
>>> a_list
['crazyit', 20, -2, 'fkit', (3.4, 5.6), ['a', 'b']]
从上面代码可以 看出 ,为列 表追加另一个列表 时, Python 会将被迫加 的列 表当 成 一 个整体 的元素,而不是追加目标列表中的元素 。 如果希望不将被追加的列表当成 一 个整体,而只是追加列表中的 元素 ,则可使用列表的 extend()方法。如下:
>>> b_list = ['a',30]
>>> b_list.extend((-2,3.1))
>>> b_list
['a', 30, -2, 3.1]
>>> b_list.extend(['C','R'])
>>> b_list
['a', 30, -2, 3.1, 'C', 'R']
删除列表元素:
del 语句不仅可以删除列表元素,也可以删除普通变量
remove ()方法来删除列表元素,该方法并不是根据索引
来删除元素的,而是根据元素本身来执行删除操作的。该方法只删除第一个找到的元素,如果找不到该元素,该方法将会引发 Va lueError 错误 。
clear() 方法,正如它的名字所暗示 的, 该方法用于清空 列 表 的所有元素
修改列表元素:
如果将列表其中一段赋值为空列表,就变成了从列表中删除元素.
列表的其他常用方法:
count():用 于统计列表中某个元素出现的次数。
index():用 于判断某个元素在列表中出现的位置。
pop():用于将列表当成“栈”使用 , 实现元素 出战功能 。pop ()方法用于实 现元素出战功能。栈是一种特殊的数据 结构,它 可 实 现先入后出( FILO ),可以使用append当作push()
能,即先加入桔的元素,反而后出枝
reverse ():用 于将列表中的元素反向存放 。
sort(): 用于对列表元素排序。
>>> #list模拟栈
...
>>> stack = []
>>> stack.append('fkit')
>>> stack.append('crazyit')
>>> stack.append('charlie')
>>> stack
['fkit', 'crazyit', 'charlie']
>>> stack.pop()
'charlie'
>>> stack
['fkit', 'crazyit']
>>> stack.pop()
'crazyit'
>>> stack
['fkit']
字典:
创建字典:可使用花括 号语法来创 建字典 ,也可使用 dict() 函数来创建字典。
需要指出的是,元组可以作为 dict 的 key ,但列表不能作为元组的 key 这是由于 diet 要求 key必须是不可变类型,但列表是可变类型,因此列表不能作为元组的 key 。
>>> dict1 = {'yuwen':20,'shuxue':30}
>>> dict1
{'yuwen': 20, 'shuxue': 30}
>>> dict2 = {(20,30):'good',30:'bad'}
>>> dict2
{(20, 30): 'good', 30: 'bad'}
>>> dict3 = {[1,2,3]:1}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> vagetables = [('celery',1.58),('brocoli',1.29),('lettuce',2.19)]
>>> dict4 = dict(vagetables)
>>> dict4
{'celery': 1.58, 'brocoli': 1.29, 'lettuce': 2.19}
>>> cars = (('celery',1.58),('brocoli',1.29),('lettuce',2.19))
>>> dict5 = dict(cars)
>>> dict5
{'celery': 1.58, 'brocoli': 1.29, 'lettuce': 2.19}
>>> c = (['celery',1.58],['brocoli',1.29],['lettuce',2.19])
>>> dict6 = dict(c)
>>> dict6
{'celery': 1.58, 'brocoli': 1.29, 'lettuce': 2.19}
>>> d = [['celery',1.58],['brocoli',1.29],['lettuce',2.19]]
>>> dict7 = dict(d)
>>> dict7
{'celery': 1.58, 'brocoli': 1.29, 'lettuce': 2.19}
>>> e = [['celery',1.58],['brocoli',1.29],('lettuce',2.19)]
>>> dict8 = dict(e)
>>> dict8
{'celery': 1.58, 'brocoli': 1.29, 'lettuce': 2.19}
在使用 dict()函 数创 建字典时 , 可以传入多个列表或元组参数作为 key-value 对 , 每个列表或元组将被当成一个 key-value 对,因此这些列表或元组都只能包含两个元素。
字典的基本用法:
可以这样说,字典相当于索引是任意不可变类型的列表:而列表则相当于 key 只能是整数的字典。因此 ,如 果程序中要使用的字典的 key 都 是整数类型, 则可 考虑能否换成列表。此外,还有 一 点需要指出,列表的索引总是从 0 开始、连续增大的;但字典的索引即使是整数类型, 也不 需要从 0 开始,而且不需要连续。因此,列表不 允许对不存在的索 引 赋值:但字典则 允许直接对不存在的 key 赋值一一这样就会为字典增加一个 key-value 对 。