1.Python序列概述:
- Python序列类似于其他语言中的数组,但功能要强大很多。
- Python中常用的序列结构有列表,元组,字符串,字典,集合以及range等对象也支持很多类似的操作。
- 列表、元组、字符串支持双向索引,第一个元素下标为0,第二个元素下标为1,以此类推;最后一个元素下标为-1,倒数第二个元素下标为-2,以此类推。
1.1列表
- 列表是Python中内置有序可变序列,列表中所有元素放在一对中括号“[ ]”中,并使用逗号分隔开;
- 当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙;在列表的中间位置进行插入或删除元素时,效率是比较低的,因为会涉及到大量的元素移动。
- 在Python中,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、元组、字典、集合以及其他自定义类型的对象。
列表常用方法:
1.1.1列表创建与删除
- 使用“=”直接将一个列表赋值给变量即可创建列表对象
- 也可以使用list()函数将元组、range对象、字符串或其他类型的可迭代对象类型的数据转换为列表。
- 当不再使用时,使用del命令删除整个列表,如果列表对象所指向的值不再有其他对象指向,Python将同时删除该值。
1.1.2列表元素的增加
(1)可以使用“+”运算符将元素添加到列表中。
>>> a_list=[1,2,3]
>>> a_list=a_list+[4]
>>> list(a_list)
[1, 2, 3, 4]
严格意义上讲,这并不是真正意义上的添加元素,而是创建一个新列表,并将原列表中的元素和新元素一次复制到新列表的内存空间。由于涉及大量元素的复制,该操作速度较慢,在涉及大量元素添加时不建议使用。
(2)使用列表对象的append()方法,原地(不改变列表在内存中的首地址)修改列表,是真正意义上的列表在尾部添加元素,速度较快。
>>> a_list=[2,3,4,5]
>>> a_list.append(9)
>>> a_list
[2, 3, 4, 5, 9]
现在,我们讲上述两种列表元素的增加方法所用时间进行一个比较:
方法一:
>>> import time
>>>
>>> result=[]
>>> start=time.time()
>>> for i in range(10000):
... result=result+[i]
...
>>> print(len(result),',',time.time()-start)
10000 , 79.22770667076111**
方法二:
>>> import time
>>>
>>> result=[]
>>> start=time.time()
>>> for i in range(10000):
... result.append(i)
...
>>> print(len(result),',',time.time()-start)
10000 , 69.65966367721558
(3)Python采用的是基于值的自动内存管理方式,当为对象修改值时,并不是真的直接修改变量的值,而是使变量指向新的值,这对于Python所有类型的变量都是一样的。
>>> a=[1,2,3]
>>> id(a)
2109152147912
>>> a=[1,2]
>>> id(a)
2109151452168
(4)列表中包含的是元素值的引用,而不是直接包含元素值。如果是直接修改序列变量的值,则与Python普通变量的情况是一样的,而如果是通过下标来修改序列中元素的值或通过可变序列对象自身提供的方法来增加或删除元素时,序列对象在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生变化,也就是所谓的“原地操作”。
>>> a=[1,2,3]
>>> id(a)
2109152147912
>>> a=[1,2]
>>> id(a)
2109151452168
>>>
>>>
>>> a=[1,2,4]
>>> b=[1,2,3]
>>> a==b
False
>>> id(a)==id(b)
False
>>> id(a[0])==id(b[0])
True
>>>