列表,字典,元组,集合的概念
一.列表
list: 所有元素放在一对方括号中,元素之间使用逗号分隔,其中的元素可以是任意类型
列表是 Python 的内置可变有序序列,是包含若干元素的有序连续内存空间。在形式上,列表的所有元素放在一对方括号“[”和“]”中,相邻元素之间使用逗号分隔开。当列表增加或删除元素时,列表对象自动进行内存的扩展或收缩,从而保证元素之间没有缝隙。Python 列表内存的自动管理可以大幅度减少程序员的负担,但列表的这个特点会涉及列表中大量元素的移动,效率较低,并且对于某些操作可能会导致意外的错误结果。因此,除非确实有必要,否则应尽量从列表尾部进行元素的增加与删除操作,这会大幅度提高列表处理速度。
在 Python 中,同一个列表中元素的类型可以不相同,可以同时包含整数,实数、字符串
等基本类型,也可以是列表、元组、字典、集合以及其他自定义类型的对象。例如:
[1,2,3]
['a','b',['c',2]]
[10, 20, 38,46]
['red flower','blue sky','green leaf']
['Python", 3.14, 5,[10, 20]]
[['file1', 200, 7],['file2', 260, 9]]
都是合法的列表对象。
列表对象常用方法如下所示。除此之外,Python 的很多内置函数和运算符也可以
对列表和其他序列对象进行操作,后面将通过一些案例逐步进行介绍。
1.append(x)
将元素x添加至列表尾部,没有返回值
2.extend(iterable)
将可迭代对象iterable中所有元素添加至列表尾部,没有返回值
3.insert(index,x)
在列表指定位置index处添加元素x,没有返回值
4.remove(x)
在列表中删除首次出现的指定元素,没有返回值
5.pop([index])
删除并返回列表对象指定位置的元素,默认为最后一个元素
6.clear()
删除列表中所有元素,但保留列表对象,没有返回值
7.index(x)
返回第一个值为x的元素的下标,若不存在值为x的元素,则抛出异常
8.court(x)
返回指定元素x在列表中的出现次数
二.字典
dictionary: 所有元素放在一对大括号中,元素之间使用逗号分隔,元素形式为“键:值”
{1:'food',2:'taste',3:'import'}
字典中的“键”可以是Python中任意不可变或可哈希数据,例如整数、实数、复数、字符串、元组等,但不能使用列表、集合、字典作为字典的“键”,包含列表、集合、字典的元组也不能作为字典的“键”
使用“=”将一个字典赋值给一个变量即可创建一个字典变量
>>>a_dict={'server':'db.diveintopython3.org','database':'mysql'}
快速创建字典:
>>>keys=['a','b','c','d']
>>>values=[1,2,3,4]
>>>dictionary=dict(zip(keys,values))
>>>x=dict() #空字典
>>>x={} #空字典
>>>d=dict(name='Dong',age=37)
可以以给定内容为“键”,创建“值”为空或特定值的字典
>>>adict=dict.fromkey(['name','age','sex'])
>>>adict
{'name':None,'age':None,'sex':None}
示例:
三.元组
tuple: 不可变,所有元素放在一对括号中,元素之间使用逗号分隔,如果元组中只有一个元素的话,后面的括号不能省略
(1,2,3)
(3,)
序列解压包
可以使用序列加压包功能对多个变量同时赋值
>>>x,y,z=1,2,3 #多个变量同时赋值
>>>v_tuple=(False,3.5,'exp')
>>>(x,y,z)=v_tuple #x=False
>>>x,y,z=range(3)
>>>x,y,z=iter([1,2,3]) #x=1
>>>x,y,z=map(str,range(3)) #使用可迭代的map对象
>>>a,b=b,a
>>>a,b,c='ABC'
>>>x=[1,2,3,4,5,6]
>>>x[:3]=map(str,range(5))
序列解包对于列表和字典同样有效
>>>s={'a':1,'b':2,'c'=3}
>>>b,c,d=s.items() #使用字典中的元素
>>>b
('c',3)
>>>b,c,d=s #使用字典时不用太多考虑元素的顺序
>>>b
'c'
>>>b,c,d=s.values()
>>>print(b,c,d)
1,3,2
序列解包遍历多个序列
>>>keys=['a','b','c','d']
>>>values=[1,2,3,4]
>>>for k,v in zip(keys,values):
print((k,v),end=' ')
使用序列解包遍历enumerate对象
>>>x=['a','b','c']
>>>for i,v in enumerate(x):
print(' The value on position {0} is {1}'.format(i,v))
The value on position 0 is a
生成器表达式
从形式上看,生成器表达式与列表推导式非常接近,只是生成器表达式使用括号而不是列表推导式所使用的方括号。与列表推导式本质上不同的是,生成器表达式的结果是一个生成器对象,属于迭代器对象。使用生成器对象的元素时,可以根据需要将其转化为列表,集合或元组,也可以使用内置函数next()、生成器对象的__next_()方法获取下一个元素,或者直接使用 for 循环遍历。但是不管用哪种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象。也就是说,生成器对象中的每个元素只能使用一次,并且只能从前往后顺序访问。
迭代器的定义
迭代器指的是迭代取值的工具。
迭代是指一个重复的过程,每一次重复都是基于上一次结果而来,迭代提供了一种通用的不依赖索引的迭代取值方式。
可迭代对象
但凡内置有__iter__方法的对象,都称为可迭代对象。
常见可迭代的对象:str,list,tuple,dict,set,文件对象。
迭代器对象
既内置有__iter__方法,又内置__next__方法的对象。执行该方法可以不依赖索引取值。
执行迭代器的__iter__方法得到的依然是迭代器。
文件对象本身就是一个迭代器对象.
四.集合
set/frozenset: 所有元素放在一对大括号在中,元素之间使用逗号分隔,元素不允许重复;
另外,set是可变的,frozenset是不可变的
{'a','b''c'}
集合是无序可变的容器对象,与字典一样使用一对大括号作为界定符,同一个集合的元素之间不允许重复,集合中每个元素都是唯一的