python序列之列表

在python中,列表的所有元素都放在一对中括号内,两个相邻元素通过逗号分隔,可以将整数、实数、字符串、列表、元组等任何类型的内容放入列表中,并且列表中的元素类型可以不同(异构)。列表是有序的对象集合

同构:列表中的元素类型都是一样,比如golang中的数组中元素类型必须一致

异构:列表中元素类型可以不一样,比如Python列表中的元素类型可以不一致

、列表的创建和删除

1、通过赋值运算符来创建列表:可通过赋值运算符”=” 将列表赋值给变量,语法格式如下:

listname = [one,two,three,four]

其中listname 表示列表的名称,one,two,three等表示列表中的元素,个数没有限制。

下面的列表都是合法的:

注意:在使用列表的时候,虽然可以将不同类型的元素放入到同一列表中,但是一般不建议这样做,而是在列表中只放一种类型的数据,方便程序的可读性

python也支持创建空列表,例如创建一个空列表,使用如下代码:

emptylist = []

2、创建数值列表:

在Python中可以使用list()函数来创建数值列表,语法格式如下:

list(data)

其中data表示可以转换为列表的数据,其类型可以是range对象、元组、字符串或者其他可迭代类型的数据。

例如:创建10到20(包括20)之间所有偶数的列表,执行命令如下:

list(range(10,21,2))

注意:list()函数不仅可以通过range对象创建列表,也可以通过其他对象来创建列表。

3、删除列表:

对于已经创建的列表,当不再使用的时候,可以通过del命令删除,语法格式如下:

del listname

4、获取列表的副本:

如果将列表传递给函数,但是不想函数修改列表,此时可以使用列表的副本,创建副本方式如下:

list[ : ] #切片表示法

创建副本也是占用内存的,如非必要,不需要创建副本

5、也可以将元组转换为列表,如下:

二、访问列表中的元素

例如:打印列表var中的元素,如图:

例如:下面例子表示访问列表中倒数第一个元素和倒数第二个元素,如图:

检查某个值是否存在与列表中,可以使用in,如下:

a = [1,2,3,4,5]
print(2 in a)   #检查2是否在列表中,返回true

在列表中检查是否存在某个值远比在字典和集合中检查速度慢,因为Python 是线性扫描列表中的值,但在字典和集合中,在同样的时间内还可以检查其他项(基于散列表)

三、遍历列表

Python中常用的遍历列表的方式有两种,下面介绍这两种方法:

1、通过for循环来遍历列表,可以输出列表元素的值,语法格式如下:

for  item in listname:
    print(item)

例如:遍历列表var中的元素的值,如图:

2、使用for循环和enumerate可以同时输出索引和元素的值,语法格式如下:

for  index,item in enumerate(listname):
    print(index,number)

例如:打印列表var的索引以及元素的值,如图:

四、添加、修改和删除列表元素

添加修改和删除列表元素也称为更新列表,实际开发中经常需要更新列表。

1、添加元素

前面介绍过通过加号”+”可以实现拼接序列,也可以实现添加元素,但是此方法速度较慢,在实际添加元素过程中建议使用append()方法来添加,此方法用于在列表的末尾添加元素。语法格式如下:

listname.append(obj)

其中listname 为列表的名称,obj为添加到列表末尾的元素

例如:打印列表var的当前长度以及添加元素之后的长度,如图:

注意:python中还提供了方法insert()也可以向列表中添加元素,此方法可以向指定位置前添加元素,但是效率不高,因此一般不推荐使用。

例如:向列表中第三个位置插入元素,执行命令如图:

上述介绍的只是将一个元素添加到列表中,如果要将一个列表中的全部元素添加到另一个列表中,可以使用extend()方法,语法格式如下:

listname.extend(seq)

其中listname表示列表名字,seq为要添加的列表。

例如:将列表varr的内容追加到列表var里,如图:

注意:上图中需要先执行var.extend(varr),然后打印var,不可以直接在print()里追加,会报错none,如:print(var.extend(varr))是不可以的。

2、修改元素:

(1)、通过索引获取该元素,然后重新赋值

例如:修改列表var中第三个元素的值,如图:

(2)、通过切片来修改列表中元素,如图:

如果将a[0:3] = [] ,那么就可以删除a切片的前三个元素

3、删除元素:

删除元素有两种情况,一种是根据索引进行删除,一种是根据元素值进行删除。

使用del关键字根据索引删除:

通过del命令,并且指定索引值进行删除,如图:

使用remove根据元素值删除:

如果要删除一个不确定位置的元素,可以通过元素值进行删除,可以使用列表对象的remove()方法进行删除(remove会删除指定数据值的第一次出现的元素).

例如:删除列表var中的hello元素,执行命令如图:

在使用remove()方法进行删除元素之前,最好先使用方法count()来判断元素是否存在,如果存在则删除,上述的代码改造后的内容如图:

注:count()函数表示元素在列表中出现的次数,使用remove()删除元素值后也可以继续使用被删除的值,只是这个值不在列表中了

使用pop方法根据索引删除:

pop方法根据索引值来从现有列表中删除元素并返回一个新的列表,如果pop()中没有指定索引,那么默认删除列表的最后一个元素,如果列表为空或者指定了一个不存在的索引值那么将会报错

下面例子演示使用pop()方法,并不设置索引,默认将删除最后一个元素,如图:

执行结果如图:

下面例子表示删除第3个索引对应的元素,如图:

运行结果如下:

下面例子表示删除索引为6的元素,结果显示索引越界了,如图:

运行结果如下:

pop()方法删除元素后还可以访问被删除的元素,如图:

del和pop()方法怎么选择:如果要从列表中删除一个元素,并且不在使用它,就选择del语句,如果删除后还需要继续使用它,那么就选择pop()方法

使用clear()来清空列表:

五、对列表进行统计和计算

1、获取指定元素出现的次数:

使用列表对象的count()方法可以获取指定元素在列表中出现的次数

例如:获取列表var中hello元素出现的次数,执行命令如图:

2、获取指定元素出现的下标:

使用列表对象的index()方法可以获取指定元素首次出现的下标

例如:获取列表var中元素hello首次出现的下标,执行命令如图:

3、统计数值列表的元素和:

python中,提供了sum()方法用于统计数值列表中元素的和,语法格式如下:

sum(listname[,start])

其中listname表示要统计的列表,start表示统计的结果在加上这个数,如果不指定默认为0

例如:统计列表var中的数值总和,然后再加上9,其中9表示上面的start参数

4、将元组中的元素添加到列表中,如图:

注:列表可以加元组,但是反过来元组不可以加列表,因为元组不可变

六、对列表进行排序

python中提供两种常用的对列表进行排序的方法,使用列表对象的sort()方法,使用内置的sorted函数。

1、使用列表对象的sort()方法:

语法格式如下:listname.sort(key=none,reverse=False)

说明:listname表示要进行排序的列表,key表示在每个元素中提取一个用于比较的键(例如:key=str.lower表示在排序的时候不区分大小写),reverse为可选参数,如果为true,表示降序排列,如果是false表示升序排列,默认为升序

例如:对列表var进行排序,执行命令如图:

上述例子中使用的是对数值进行排序,如果使用sort()方法对字符串进行排序,此时采用的规则是先对大写字母进行排序,然后对小写字母进行排序,如果不区分大小写需要指定key参数

例如:对列表var进行排序,执行命令如下:

注意:在进行排序的时候,sort()对中文的支持不好,因此对中文排序的时候,不要使用sort()方法

2、使用内置的sorted()函数实现排序

python中提供了内置函数sorted()函数对列表进行排序,使用该函数排序后,原列表中的元素顺序不变,语法格式如下:

sorted(listname,key=none,reverse=False)

其中listname表示列表名称, key表示在每个元素中提取一个用于比较的键(例如:key=str.lower表示在排序的时候不区分大小写),reverse为可选参数,如果为true,表示降序排列,如果是false表示升序排列 ,默认为升序

例如:对列表var和varr进行排序,使用sorted函数,如图:

注意:使用sort()方法和sorted()函数都可以对列表进行排序,但是sort()会改变原列表的元素排列顺序,使用sorted()会建立一个原列表的副本,该副本为排序后的列表。

七、列表推导式(列表解析):

使用列表推导式可以快速生成一个列表,或者根据某个列成生成满足指定需求的列表,减少代码工作量,语法格式如下:

1、生成指定范围的数值列表:

list = [expression for var in range]

list表示生成的列表名称,expression表达式,用于生成存储到列表中的值,接下来是一个for循环,用于给表达式提供值

例如:计算0-9的数的平方根,如图:

如上图:for循环中的value就是提供给表达式value **的值

2、根据列表生成指定需求的列表,语法格式如下:

newlist = [expression for var in list]

其中newlist表示新列表,expression表达式,用于计算新列表中的元素,var为变量,值为后面列表中的元素,list表示用于生成新列表的原列表。

例如:定义一个记录商品价格的表,通过列表推导式生成一个全部商品打5折的新列表,如图:

3、从列表中选择符合条件的元素组成新的列表,语法格式如下:

newlist = [expression for var in list if codition]

其中newlist表示新的列表,expression表达式,用于计算新列表中的元素,var为变量,值为后面列表中每个元素的值,list用于生成新列表的原列表,codition为条件表达式,用于筛选条件

例如:定义一个记录商品价格的表,通过列表推导式生成一个商品价格高于1000的列表,如图:

八、二维列表:

1、直接定义一个二维列表

在python中,二维列表就是包含列表的列表。

例如:[[1,2,3],[“hello”,”world”],[“ni”,”hao”]]内部的每个元素(列表)之间使用逗号分隔。

其中[1,2,3]表示二维列表的第一行,[“hello”,”world”]表示二维列表的第二行,[“ni”,”world”]表示二维列表的第三行,以此类推。

2、使用嵌套的for循环创建

例如:创建一个包含4行5列的二维列表,如图:

3、使用列表推导式创建

使用列表推导式也可以创建二维列表,此方法比较简洁,建议使用此方法。

例如:通过列表推导式创建一个包含4行5列的二维列表,如图:

扩展:在python中list()函数用于将字符串转换成列表,列表对象的reverse()方法用于对列表进行逆序排序,即最后一个元素移动到第一个,以此类推。

标签