首页 > 编程语言 > 详细

【学习资料】 - Python3基础之列表List详解

时间:2020-02-20 17:28:24      阅读:96      评论:0      收藏:0      [点我收藏+]

Python3基础之列表List详解

上一篇笔者罗列了python所有的数据类型,其中就有列表LIst,这章具体来看下列表的一些内置方法和用处。

列表List介绍

用[]表示,中间以,隔开,元素类型可以不同。

可以进行切片动作,可以用运算符“+”连接列表。

内部元素是可变的,所以称为可变数据类型(variable)。

列表占用一块可以存放多个值的连续的内存空间,对于内存占用较为浪费。

 

列表推导式

首先,笔者先扩展一个知识点,列表推导式(又称列表解析式)。

什么是列表推导式,简单的说就是用一行简单的表达式直接得到一个有值的列表。适合较简单的逻辑场景,性能高于列表,如果过于复杂的逻辑,就还是用多行表达式进行吧。

扩展: 还有生成器表达式,字典推导式。

举例:

得到1-100的所有数字

正常需要如下:

a = []

for i in range(1,101):

a.append(i)

print(a)

而列表推导式只需:

a = [i for i in range(1,101)]

print(a)

如果是取1-100内的偶数

a = [i for i in range(1,101) if i%2==0]

是不是方便很多,能帮读者解决很多简单的逻辑推导,这里只需了解即可。

 

列表切片

言归正传,一个列表内会有很多值,那如果只需要里面的某个值或者某些值要怎么办呢?这里就会用到切片。

切片,对厨师而言,就是把整块肉切成一片一片,这里的切片就是把列表切出我们想要的元素。

语法: list[(开始索引b):(结束索引e):(步长s)]   注:()内可以省略。

lst = [1,2,3,4,5,6,7,8]

想取出里面的4,怎么办?

getlst = lst[3] #单索引取值,索引从0开始计算,即索引0代表第一位元素。

print(getlst)

想取出里面的3,4,5,怎么办?

getlst = lst[2:5]  #切片规则:左闭右开,取头不取尾,所以是从索引2到索引5,实际取得是索引2,3,4的值,5不取。

想取出里面的2,4,6,8,怎么办?

getlst = lst[1::2] # 从索引1开始取值,如果结束索引不填,则到底,步长取2,即取值间隔为2.

想取出里面的7,5.怎么办?

getlst = lst[6:3:-2]  # 也可以getlst = lst[-2:-5:-2],索引可以为负数,即从后往前算,后第一位为-1.

把列表中的元素反过来排序,怎么办?

getlst = lst[::-1]  # 步长为负数即获取的数从后往前获取。

列表切片只能取一些有规律的索引值,如果要取里面的3,6,7怎么办?

那只能使用遍历取跑整个列表的值。

 

切片赋值

语法:list[(开始索引b):(结束索引e):(步长s)] = iteratable

可迭代对象iteratable,有文件对象,字符串对象,列表对象。。。等等

 

当起始索引和结尾索引是一样的时候,表示在该索引所在位置之后插入可迭代对象中的所有元素到该列表中。

lst = [1,2,3,4,5,6,7,8]

lst[3:3] = [4,5,6]

print(lst)

技术分享图片

 

当起始索引和结尾索引不一样时,就是有替换的功能。

lst[::2] = [x for x in range(1,5)] 

技术分享图片

可迭代对象的值总数只能等于被赋值对象,否则报错如下:

ValueError: attempt to assign sequence of size 6 to extended slice of size 4

 

列表内置方法

如何看类的内置方法,dir(list)

更新列表

extend()方法

在列表尾部插入新元素,新元素必须为可迭代对象。

lst = [1,2,3,4,5,6,7,8]

lst.extend([4,5])

print(lst)

技术分享图片

lst.extend(4)

报错:TypeError: ‘int‘ object is not iterable

 

append()方法

在列表尾部插入新元素,大多数类型的值都行。

lst = [1,2,3,4,5,6,7,8]

lst.append([4,5])

print(lst)

技术分享图片

与extend比较是不是看出了区别,append会原封不动的把值插入列表,extend则按照可迭代对象内的元素类型插入。

lst.append(4)

支持不可迭代对象插入。

技术分享图片

 

insert()方法

根据索引插入新元素,大多数类型的值都行。

lst = [1,2,3,4,5,6,7,8]

lst.insert(1,"hello")

print(lst)

技术分享图片

在索引1位置插入新元素,后续旧元素往后推。

 

删除列表

pop()方法

根据索引删除元素,默认删除最后一位(不填索引值)

lst = [1,2,3,4,5,6,7,8]

lst.pop(2)

print(lst)

技术分享图片

 

remove()方法

直接根据需要删除的元素去列表内删除第一个匹配的项。

lst = [1,2,3,4,2,2,7,8]

lst.remove(2)

print(lst)

技术分享图片

只是把第一个2删除,后面的2并未删除。

要全部删除需要遍历:

a = 1

lst = [1,2,3,4,2,2,7,8]

while a:

           try:

               lst.remove(2)

           except ValueError:

               a = 0

print(lst)

还有更简单的方法,读者可自行研究。

 

clear()方法

删除列表内的所有元素,变为空列表

lst = [1,2,3,4,2,2,7,8]

lst.clear()

print(lst)

技术分享图片

 

del 方法

删除列表索引切片的值。

lst = [1,2,3,4,2,2,7,8]

del lst[2:4]

print(lst)

技术分享图片

 

查询列表

index()方法

通过具体的值查询在列表中的位置,第一个匹配的位置。

lst = [1,2,3,4,2,2,7,8]

a = lst.index(2)  # 返回索引值

print(a)

技术分享图片

 

其他方法

copy()方法: 复制列表

sort()方法: 列表排序,默认正序reverse=False

count()方法:  计算列表内某元素的数量

 

常见面试题

  1. 举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]

  A: list.sort(reverse=False) # 无返回值 ; list = sorted(list,reverse=False) # 有返回值

  1. 使用lambda函数对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],输出结果为

[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小

  A: a = sorted(foo,key=lambda x:(x<0,abs(x)))

  1. list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]

  A: 使用冒泡排序

  1. [[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

  A: a = [j for i in [[1,2],[3,4],[5,6]] for j in i]

【学习资料】 - Python3基础之列表List详解

原文:https://www.cnblogs.com/yingzidy/p/12335853.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!