python 列表用法总结

python 列表用法总结

本文为python中最重要的数据类型列表的基础用法笔记。

列表理解

python 是基于值的的自动内存管理方式,每个变量、元素都指向内存地址,修改都是对内存地址操作,不是修改值 。记住这一点对理解python很重要 。
列表是内置可变序列,是包含若干元素的有序连续储存空间 。当增删列表时,会自动进行内存的扩展或者收缩,以保证元素之间没有空隙。内存的自动管理,大幅度减少了运行内存和程序员的内存管理负担,但是没有免费的午餐,列表的这个特点更容易引发意外的错误,使用时需注意。
列表的生成,直接把元素放在方括号内 [ ] ,元素可以是不同类型 。也可以借助 list() 将其他可迭代对象类型的数据转化为列表

a = [10, 20, 30]
>[10, 20, 30]
a = a = ['hellow', 1, (1,1), {'1':'a', '2':'b'}, {1,2},[1,2]] # 元素可以是各种类型变量
>['hellow', 1, (1, 1), {'1': 'a', '2': 'b'}, {1, 2}, [1, 2]]
>a = [] # 新建一个空列表
>a = list (range(10)) # list()将其他可迭代对象类型的数据转化为列表
>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

方法总结

方法 作用
list.append(x) 将元素x添加到列表尾部 ,原地增加
list.extend(L) 将列表L中的元素添加到尾部
list.insert(index, x) 在index位置处添加元素x
list.remove(x) 删除第一个出现的x
list.pop([index)] 删除并返回列表对象指定位置的元素,不指定删除最后一个
list.clear() python用法 ,删除所有元素,保留列表对象
list.index(x) 返回元素x位置,没有报错
list.count(x) 返回x的频数
list.reverse() 对列表元素进行原地翻转
list.sort 原地排序
list.copy 浅复制

代码示例如下:

a = [1, 2, 3]
a.append('append加的元素')  # 列表 + 运算也可以添加元素,但效率远低于append, python社区推荐使用append
>>>[1, 2, 3, 'append加的元素']
a.extend(['a', 'b', 'c'])
>>>[1, 2, 3, 'append加的元素', 'a', 'b', 'c']
a.insert(0, "刚insert的元素") # insert会改变之后位置指向的地址,效率较低,能不用尽量不用
>>>['刚insert的元素', 1, 2, 3, 'append加的元素', 'a', 'b', 'c']
a.remove(1) # 删除 第一出现的 1  # 删除中间的也会影响之后的指向地址
>>>['刚insert的元素', 2, 3, 'append加的元素', 'a', 'b', 'c']
b = a.pop() # 注意,pop 返会被删除的元素,而删除是原地操作,a被修改了
>>>a = ['刚insert的元素', 2, 3, 'append加的元素', 'a', 'b']  
>>>b= 'c'
a.index(2) # 返回位置 
>>>1
a.count(2) # 返回个数
>>>1
a.reverse() # 原地操作,不返回值
>>>['b', 'a', 'append加的元素', 3, 2, '刚insert的元素']
a = [1,3,2]; a.sort()
>>>[1, 2, 3]
b = a.copy () # 浅复制  ,只复制列表的元素的值,a 被修改不会修改b , 直接赋值是指向同一内存地址,比如下面区别
a = [1,2];b = a ;a[0]= 2
>>>b = [2, 2]
a = [1,2]; b = a.copy(); a[0]= 2
>>>b = [1, 2]
a.clear() # 清空列表 
>>>a = []

切片

切片是python 最常用的最重要的操作之一,也适用于元组,字符串,range对象等。切片就是对列表进行切割分片,拿到我们需要的元素 。切片由两个冒号,三个数字完成,[start:end: step] 。start默认0, end默认列表长度,step默认1 。而且切片下标越界不会报错, 代码相当稳健 。

a = list(range(10))
>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[::] # 全切片 
>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[::-2] # 步长为负, 表示从后向前切 ,步长为2 
>>>[9, 7, 5, 3, 1]
a[1:-2:1] # start /end 为负,表示负索引, 从后向前数, -1即为倒数第一个 。
>>>[1, 2, 3, 4, 5, 6, 7]

列表推导式

列表推导式是彰显python灵活特性的方法之一,可以快速方便的生成满足特定要求的列表,而不借助循环 。

a = [ x**3 for x in range(4)]
>>>[0, 1, 8, 27]
b= [[1, 2],[3, 4]]; [i for j in b for i in j ] # j 遍历 b, 而 i 遍历 j
>>>[1, 2, 3, 4]
[i for i in [1,2] if i>0 and i< 2]# 条件限定 
>>>[1]
[i+1 if i>0 else i-1 for i in [-1, 1, 2,3] ] # 选择
>>>[-2, 2, 3, 4]
[(i, j) for i in [1,2] for j in [3,4,5]] # 双循环 
>>>[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]

总之,需要通过循环来生成的序列,python都可以通过列表推导式来生成了 ,控制选择多重循环都可以 。

猜你喜欢

转载自blog.csdn.net/weixin_43705953/article/details/106953359