我们来看一下Python中的序列:
序列可分为可变序列与不可变序列。可变序列的最本质特征就是支持原位改变,首先我们来看一下可变序列中的list列表的五个特征:
①任意类型对象的有序集合。Python的list列表中的对象与C/C++不同,它支持不同类型的对象,可以是字符串、整数、浮点数甚至是列表等
②与C/C++语言类似,list列表也可以通过下标来访问列表中的元素,下标索引从0开始
③可变长度是指可以通过.append()方法来改变list列表的长度,异质是指列表中的对象类型可以不一致,任意嵌套指在列表中可以嵌套列表
④所谓的支持原位改变则是可以通过下标来改变列表中某一位置的值
⑤对象引用数组,与列表的存储相关,我们来测试一段代码:
列表x的存储情况如下,x并不是直接引用 对象2、3、4而是通过一个引用对象来实现存储,引用中存储了下标0、1、2 ,接下来我们创建变量y,并赋值2,则它与x[0]共享引用(2已经被缓存)
接下来我们来看一下可变列表的通用操作:
>>> scores=[90,91,92,93,94,95,96]
>>> scores[5]=100
>>> scores
[90, 91, 92, 93, 94, 100, 96]
>>> scores[:3]=[100]
>>> scores
[100, 93, 94, 100, 96]
>>> scores[::2]=[99,99,99]
>>> scores
[99, 93, 99, 100, 99]
>>> del scores[0]
>>> scores
[93, 99, 100, 99]
>>> del scores[0:2]
>>> scores
[100, 99]
>>> scores=[90,91,92,93,94,95,96]
>>> del scores[0:-1:2]
>>> scores
[91, 93, 95, 96]
>>> scores[0:2]=[]
>>> scores
[95, 96]
>>> scores.remove(95)
>>> scores
[96]
>>> scores.clear()
>>> scores
[]
>>> scores.append(99)
>>> scores.extend([99,98,97,96,95])
>>> scores
[99, 99, 98, 97, 96, 95]
>>> scores.insert(0,100)
>>> scores
[100, 99, 99, 98, 97, 96, 95]
>>> scores.pop(2)
99
>>> scores
[100, 99, 98, 97, 96, 95]
>>> scores.reverse()
>>> scores
[95, 96, 97, 98, 99, 100]
>>> l=scores.copy()
>>> l
[95, 96, 97, 98, 99, 100]
>>> y=scores[:]
>>> y
[95, 96, 97, 98, 99, 100]
>>>
list列表的常用操作包括:
>>> scores=[90,92,97,91,100,99]
>>> scores.sort()
>>> scores
[90, 91, 92, 97, 99, 100]
>>> names=["Tom","Jerry","Marry"]
>>> names.sort()
>>> names
['Jerry', 'Marry', 'Tom']
>>> names.sort(reverse=False)
>>> names
['Jerry', 'Marry', 'Tom']
>>> names.sort(reverse=True)
>>> names
['Tom', 'Marry', 'Jerry']
>>> names.sort(key=lambda n:n[1])
>>> names
['Marry', 'Jerry', 'Tom']
>>>
在访问指定索引范围的列表内容时,终止索引是不包含在内的,我们可以写一段代码测试一下:
这样的形式是由于列表的存储方式出现的:
如图,在0~3之间的城市包括北京、上海和深圳,而不包括下标索引为4的天津,同理,我们可以通过负数索引来访问相应的元素
同时我们要特别注意列表的复制问题,我们可以通过一段简单的代码来看一下列表复制过程中可能出现的问题:
我们会发现,复制给l的序列发生改变时,原序列也会发生改变,这是由于共享引用引起的,我们可以通过下图来简单说明:
从这张图中可以看出,x与y共享引用,因此,只要指向的对象发生变化,两个序列都会发生变化
接下来,我们来看一下序列的通用操作: