组合数据类型
1 .列表类型
概念:列表(list)是0个或多个对象引用的有序序列,属于序列类型。与元组不同,列表的长度和内容都是可变的,可自由对列表中的数据进行增删改查。列表没有长度限制,元素类型可以不同,使用起来非常灵活。
拓展: 列表和数组
每种编程语言都提供一个或多个表示一 组元素的方法,例如,C语言采用数:组,Python采用列表。在大多数语言中,数组十分常见,仅有少量语言采用列表而不是数组。列表和数组类似,但并不完全一样,列表和数组有两个显著不同。
第一,数组需要预先分配大小,列表则不需要。当创建一个数组时,必须指定数组的大小,即它能容纳元素的个数。如果不知道有多少元素,必须假设-一个最大可能的数值,再按照这个最大值分配一个数组,并记录数组中实际存储元素的个数,以保证实际使用的元素数量不超过数组的限制。列表则没有预分配大小的要求和限制,创建列表变量时不需要知道元素个数,可以在使用中动态插入任何数量的元素。
第二,数组要求元素类型一致,列表则不需要。数组要求每个元素具有相同的数据类型,如果某个元素是整数,则数组中全部元素都是整数。列表没有上述限制, 列表中不同元素的类型可以相同, 也可以不同,甚至,列表中的元素也可以是列表类型。列表的这个特点十分灵活,为程序编写提供了很大的设计空间。
☆列表类型的操作。常用函数或方法如下表:
函数或方法 | 描述 |
---|---|
ls[i] = x | 替换列表ls第i数据项为x |
ls[i:j] = lt | 用列表lt替换列表ls中的i到j项数据(不含j,下同) |
ls[i:j:k] | 用列表lt替换列表ls中i到j项以k为步长的数据 |
del ls[i:j] | 删除列表i到j的数据 |
del ls[i:j:k] | 删除列表i到j的数据,以k为步长 |
ls += lt 或 ls.extend(lt) | 将列表增加到列表ls中 |
ls *= n | 复制列表ls n次 |
ls.append(x) | 在ls中追加一个元素x |
ls.clear() | 删除所有ls里的数据 |
ls.copy() | 生成一个新列表,复制ls所有元素 |
ls.insert(i,x) | 在列表的i位置插入x元素 |
ls.pop(i) | 在ls中取走并删除i元素 |
ls.remove(x) | 删除列表中出现的第一个元素x |
ls.reverse() | 反转ls元素 |
ls.index(x[,[i[,j]) | 返回查找x第一次出现的索引,i为开始查找,j为结束查找。 |
>>> a = [20,10,50,40,30]#列表的创建
>>> type(a)
<class 'list'>
>>> student = ['张三','李四','王五']#列表的追加
>>> student.append('陈六')
>>> student
["张三",'李四','王五','陈六']
>>> student += ['貂蝉','猪八戒']
>>> student
['张三','李四','王五','陈六','貂蝉','猪八戒']
>>> student.extend('张飞','关羽')
['张三','李四','王五','陈六','貂蝉','猪八戒','张飞','关羽']
>>> student = ['红楼梦','水浒传']#插入元素
>>> student.insert(1,'三国演义')
>>> student
['红楼梦','三国演义','水浒传']
>>> student = ['广州','深圳']#替换元素
>>> student[0] = "揭阳"
>>> student
['揭阳','深圳']
>>> student = ['广东','江苏','福建']#remove删除
>>> student.remove('江苏')
>>>> student
['广东','福建']
>>> student = ['广东','江苏','福建']#pop取走 方法
>>> student.pop(1)
>>>>> student
['广东','福建']
>>> a = [1,2,3,4]#反转
>>> a.reverse()
>>> a
[4,3,2,1]
>>> a = [1,2,3,4]#copy复制
>>> b = a.copy()
>>> b
>[1,2,3,4]
>>> a = [1,2,3,4]#清除
>>> a.clear()
>>> a
[]
>>> student = ['迈克尔·乔丹','科比·布莱恩特','雷阿伦']#替换元素
>>> student.index('科比·布莱恩特')
>>> student
1
列表生成式和生成器
我们还可以使用列表的生成式语法来创建列表,代码如下所示。
f = [x for x in range(1, 10)]
print(f)
f = [x + y for x in 'ABCDE' for y in '1234567']
print(f)
# 用列表的生成表达式语法创建列表容器
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1, 1000)]
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
后期学习继续补充。
分享到这