序列
Python中常用的序列结构有列表、元组、字符串,字典、集合以及range、zip、 filter等对象也支持很多类似的
概述
列表
创建、修改与删除
- 创建
l=['a','v','f']
list(range(1,13))
list=[] #创建空列表
list('hello world')
不要使用list作为变量名,会影响
list
这一方法的正常使用
- 增加、修改
>>> aList = [3,4,5]
>>> aList = aList + [7]
>>> aList
[3, 4, 5, 7]
>>> aList.append(9)
>>> aList
[3, 4, 5, 7, 9]
使用列表对象的append()方法在当前列表尾部追加元素,原地修改列表,
是真正意义上的在列表尾部添加元素,速度较快。
如果是通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加和删除元
素时,序列对象在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生变化,也就
是所谓的“原地操作”。>> a = [1, 2, 3] >> id(a) 2389572193096 >> a.append(4) >> a.remove(3) >> a[0] = 5 >> a [5, 2, 4] >> id(a) 2389572193096
使用列表对象的extend()方法可以将另一个可迭代对象的所有元素添加至该列表对象尾部。通过extend()方法来增加列表元素也不改变其内存首地址,属于原地操作。
>>> aList = [3, 4, 5, 7, 9] >> aList.extend([11,13]) >> aList [3, 4, 5, 7, 9, 11, 13] >> aList.extend((15,17)) >> aList [3, 4, 5, 7, 9, 11, 13, 15, 17]
>>> x = [] #运算符+=类似于列表的extend()方法。
>>> x += '1234'
>>> x
['1', '2', '3', '4']
>>> aList.insert(3, 6) #在下标为3的位置插入元素6
>>> aList
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
- 删除
del a_list[3]
使用列表的pop()方法删除并返回指定位置(默认为最后一个)上的元素,
如果给定的索引超出了列表的范围则抛出异常。
a_list.pop()
a_list.pop(1)
a_list.remove(7)
切片操作
切片使用2个冒号分隔的3个数字来完成:
- 第一个数字表示切片开始位置(默认为0)。
- 第二个数字表示切片截止(但不包含)位置(默认为列表长度)。
- 第三个数字表示切片的步长(默认为1),当步长省略时可以顺便省略最后一个冒号。
【例】
>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[::] #返回包含所有元素的新列表
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[::-1] #逆序的所有元素
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> aList[::2] #偶数位置,隔一个取一个
[3, 5, 7, 11, 15]
>>> aList[1::2] #奇数位置,隔一个取一个
[4, 6, 9, 13, 17]
>>> aList[3::] #从下标3开始的所有元素
[6, 7, 9, 11, 13, 15, 17]
>>> aList[3:6] #下标在[3, 6)之间的所有元素
[6, 7, 9]
>>> aList[0:100:1] #前100个元素,自动截断
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList[100:] #下标100之后的所有元素,自动截断
[]
排序
>>> aList.sort() #默认是升序排序
>>> aList.sort(reverse=True) #降序排序
>>> aList.reverse() #原地逆序
其他
自行复习
- 用于序列操作的常用内置函数
- 列表推导式
- 使用列表实现向量运算
- 切片+filter()
元组
元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素。元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“()”中,而不是方括号中。
创建与删除
>>> tuple('abcdefg') #把字符串转换为元组
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> aList
[-1, -4, 6, 7.5, -2.3, 9, -11]
>>> tuple(aList) #把列表转换为元组
(-1, -4, 6, 7.5, -2.3, 9, -11)
>>> s = tuple() #空元组
>>> s
()
使用del可以删除元组对象,不能删除元组中的元素
元组与列表的区别
- 元组一旦定义就不允许更改。
- 元组没有append()、extend()和insert()等方法,无法向元组中添加元素。
- 元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组
中删除元素 - 元组一旦定义就不允许更改。
- 元组没有append()、extend()和insert()等方法,无法向元组中添加元素。
- 元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组
中删除元素
其他
- 序列解包
- 生成器推导式
字典
- 字典是无序、可变序列。
- 字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等
等。 - globals()返回包含当前作用域内所有全局变量和值的字典。
- locals()返回包含当前作用域内所有局部变量和值的字典。
创建与删除
>>> a_dict = {'server': 'db.diveintopython3.org', 'database': 'mysql'}
>>> x = {} #空字典
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> dictionary = dict(zip(keys, values))
d = dict(name='Dong', age=37)
adict = dict.fromkeys(['name', 'age', 'sex'])#以给定内容为键,创建值为空的字典
- 使用del删除整个字典
- 使用del删除字典中指定键的元素
- 使用字典对象的clear()方法来删除字典中所有元素
- 使用字典对象的pop()方法删除并返回指定键的元素
- 使用字典对象的popitem()方法删除并返回字典中的一个元素
集合
- 无序、可变序列
- 元素不可重复
- 只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,
而不能包含列表、字典、集合等可变类型的数据
创建与删除
a_set = set(range(8,14))
a = {3, 5}
当不再使用某个集合时,可以使用del命令删除整个集合。集合对象的pop()方
法弹出并删除其中一个元素,remove()方法直接删除指定元素,clear()方法
清空集合。
>>> a = {1, 4, 2, 3}
>>> a.pop()
1
>>> a.pop()
2
>>> a
{3, 4}
>>> a.add(2)
>>> a
{2, 3, 4}
>>> a.remove(3)
>>> a
{2, 4}
运算
>>> a_set = set([8, 9, 10, 11, 12, 13])
>>> b_set = {0, 1, 2, 3, 7, 8}
>>> a_set | b_set #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set & b_set #交集
{8}
>>> a_set - b_set
{9, 10, 11, 12, 13}
>>> a_set ^ b_set #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
总而言之
1、list、tuple是有序列表;dict、set是无序列表
2、list元素可变、tuple元素不可变
3、dict和set的key值不可变,唯一性
4、set只有key没有value
5、set的用途:去重、并集、交集等
6、list、tuple:+、*、索引、切片、检查成员等
7、dict查询效率高,但是消耗内存多;list、tuple查询效率低、但是消耗内存少