python学习笔记_第4天(列表)

序列

序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列是一块用来存放多个值的连续内存空间。空间内存放所指对象的id,如a = [10,20,30,40]
在这里插入图片描述
变量a指向序列块的id地址,序列块中每一个存放位指向对应元素的id地址。
定义一个序列,先在堆中新建序列元素对象,再建序列块,序列块大小可变,序列块中存储元素对象的id地址,变量a建在栈中存放序列块id地址。
python中常用的序列结构有:字符串、列表、元组、字典、集合。

列表

列表是内置可变序列,用于存储任意数目、任意类型的数据集合。列表中的元素可以各不相同,可以是任意类型。

a = [1,3,5,'a','b','c']
b = ['$','_',a]  # ['$', '_', [1, 3, 5, 'a', 'b', 'c']]
列表的创建
  1. []创建
a = [1,3,5,'a','b','c']
b = []  # 可创建一个空列表对象
  1. list()创建
    list()可以将任何可迭代的数据转化成列表,常与range()连用
    range()不是列表,返回一个range对象,但可以方便的创建整数列表。
    语法格式为:range([起始数字,] 结尾数字 [,步长])
    起始数字默认为0,步长默认为1
a = list("study python")  # ['s', 't', 'u', 'd', 'y', ' ', 'p', 'y', 't', 'h', 'o', 'n'],将字符串拆解成单个字符存放入列表
type(range(10))  # <class 'range'>
b = list(range(10))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],包前不包后
c = list(range(3,20,2))  # [3, 5, 7, 9, 11, 13, 15, 17, 19]
d = list(range(20,3,-2))  # [20, 18, 16, 14, 12, 10, 8, 6, 4],步长为负数时递减
e = list(range(3,-10,-1))  # [3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
f = list(range(-3,-10,-1))  # [-3, -4, -5, -6, -7, -8, -9],步长为负数,起始数字 > 结尾数字
  1. 推导式生成列表(涉及for 循环)
    使用列表推导式可以非常方便的创建列表,内可包含for 循环和if语句。
a = [x*2 for x in range(5)]  # [0, 2, 4, 6, 8]
b = [x*2 for x in range(100) if x%9==0]  # [0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
列表对象的常用函数
功能函数说明
增加元素list.append(x)将元素x增加到列表list尾部
增加元素list.extend(List)将列表List所有元素加到列表list 尾部
增加元素list.insert(index,x)在列表list指定位置index 处插入元素x
删除元素del list[index删除列表指定索引index处的元素
删除元素list.remove(x)在列表list中删除首次出现的指定元素x
删除元素list.pop([index])删除并返回列表list 指定index处的元素,默认是最后一个元素
删除所有元素list.clear()删除列表所有元素,但不删除列表对象
访问元素list[index]通过索引直接访问, 索引区间超出[0, 列表长度-1]的范围报错
访问元素list.index(x[,起始位置,终止为止])返回第一个x 的索引位置,若不存在x 元素则报错
计数list.count(x)返回指定元素x 在列表list 中出现的次数
列表长度len(list)返回列表中包含元素的个数
排序list.sort()所有元素原地排序
排序sorted(list[,reverse=True])返回新的排序列表,默认升序,不对原列表做修改
排序list(reversed(list))返回一个逆序排列的迭代器对象,需转换为列表读取,且只能读取一次
  • 列表元素的增加
  1. append()方法
    原地修改列表对象,在列表尾部添加新元素,速度最快推荐使用。
a = [20,40]
id(a)  # 76339272
a.append(80)  # [20, 40, 80]
id(a)  # 76339272
  1. +运算符操作
    并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,不建议使用。
a = [20,40]
id(a)  # 81442440
a = a + [60,80]
id(a)  # 76967624
  1. extend()方法
    将指定列表的所有元素添加到目标列表的尾部,属于原地操作,不创建新的列表对象。
    "+"运算符操作不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这会涉及大量的复制操作,不建议使用。
a = [20,40]
id(a)  # 76337672
a.extend([50,60])  # [20, 40, 50, 60]
id(a)  # 76337672

a = a+[50]  # [20, 40, 50, 60, 50]
id(a)  # 76374920
  1. insert()插入方法
    list.insert(index,x)可以将元素插入到列表对象的任意指定位置,但这样会让插入位置后所有的元素进行移动,从而影响处理速度。涉及大量元素时,尽量避免使用。
    类似这种移位操作remove()、pop()、del(),在删除非尾部元素时也会发生操作位后元素的移动,尽量避免使用。
a = [10,20,30]
id(a)  # 76361224
a.insert(2,100)  # [10, 20, 100, 30]
id(a)  # 76361224
  1. 乘法扩展
    使用乘法扩展列表时,生成一个新列表,且新列表元素是原列表元素的多次重复。
a = [1,2,3,'a','b','c']
id(a)  # 81049224
a = a*3  # [1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c']
id(a)  # 76339272
  • 列表元素的删除
    若从列表中间删除元素,删除位置后所有的元素进行前移,从而影响处理速度,尽量避免使用。
  1. del list[]删除
    删除列表指定位置的元素,原地操作,不创建新的列表对象。
a = ['a','b','h','c','d','e']
del a[2]  # ['a', 'b', 'c', 'd', 'e']
  1. remove()方法
    删除首次出现的指定元素,若不存在该元素抛出异常。原地操作,不创建新的列表对象。
a = [1,2,3,1,2,3,1,2,3]
a.remove(2)  # [1, 3, 1, 2, 3, 1, 2, 3]
  1. pop()方法
    pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。原地操作,不创建新的列表对象。
a = [10,20,30,40,50]
b = a.pop()
print(b)  # 50
print(a)  # [10, 20, 30, 40],依次向外取数
c = a.pop(1)  # 未指定位置时默认弹出列表最后一个元素,可指定位置
print(c)  # 20
print(a)  # [10, 30, 40]
  1. list.clear()方法
    删除列表内所有元素变为一个空列表,不删除列表对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值