Python学习(4)列表:列表的创建与删除、访问列表元素、遍历列表、添加修改删除列表元素、对列表进行统计计算、对列表进行排序、列表推导式

4.2.1列表的创建与删除
1.使用赋值运算符直接创建列表
用赋值运算符“=”直接将一个列表赋值给变量,语法格式如下:

lt = [element1,element 2,element 3,...,element n]

其中,lt表示列表名称,可以是任何符合Python命名规则的标识符;“element1,element 2,element 3,…,element n”表示列表中的元素,个数没有限制,并且只要是Python支持的数据类型就可以。
说明:在使用列表时,虽然可以将不同类型的数据放到同一个列表中,但通常一个列表只放一种类型的数据,这样可以提高程序的可读性。

2.创建空列表

lt = []         #创建一个名为lt的空列表

3.创建数值列表
在Python中,可以使用list()函数直接将range()函数循环出来的结果转换为列表
list()函数的基本语法如下:

list(date)

其中,data可以转换为列表的数据,其类型可以是range对象、字符串、元组或者其他可迭代型数据。
例如,创建一个10-20之间(不包括20)所有偶数的列表:

list(range(10,20,2))

使用list()函数时不仅能通过range对象创建列表,还可以通过其他对象创建列表。

4.删除列表
可以使用del语句删除,语法如下:

del listname

其中listname为列表名称
del语句在实际开发中并不常用,因为Python自带的垃圾回收机制会自动销毁不用的列表。

4.2.2访问列表元素
在Python中,将列表内容输出直接使用print()函数,例子如下,输出a列表:

a = [1,2,3,4]
print(a)

输出结果为:[1, 2, 3, 4]
这样输出是有括号的,我们如下输出指定元素:

a = [1,2,3,4]
print(a[2])

结果为:3
从上面执行结果中可以看出,在输出单个列表时,不包括中括号,如果是字符串不包括左右的引号。

4.2.3遍历列表
1.用for循环实现
直接使用for循环遍历列表,只能输出元素的值。语法如下:

for a in b:
    #输出a

其中,a是用于保存获取的元素值,要输出元素内容的值,要输出元素内容时,直接输出该变量即可;b为列表名称
例子如下:

team = [1,2,3,4,5,6]
for item in team:
    print(item)

结果为:
1
2
3
4
5
6

2.使用for循环和enumerate()函数实现
使用for循环和enumerate()函数可以实现同时输出索引值和元素内容功能。语法格式如下:

for index,item in enumerate(listname):
    #输出index和item
#参数说明:
    #index:用于保存元素的索引
    #item:用于保存获取到的元素值,要输出元素内容时,直接输出该变量即可。
    #listname:列表名称。

例子如下:

team = [521,477,"你好","热爱和平"]
for index,item in enumerate(team):
    print(index+1,item)

结果为:
1 521
2 477
3 你好
4 热爱和平

4.2.4添加、修改和删除列表元素
1.添加元素
在前面的文章4.1曾介绍通过“+”号将两个序列相加,接下来我们用append()方法,这种方法相对于“+”号相加要更快,其语法格式如下:

a.append(b)

a为要添加列表的名称,b为添加到列表末尾的名称,例子如下:

a = [1,2,3]
a.append("b")
print(a)

结果为:[1, 2, 3, ‘b’]
处理append()方法还有insert()方法可以插入元素,但效率没有append()高,不推荐使用。
如果想要将一个列表中全部元素添加到另一个列表中,可以使用extend()方法实现,语法如下:

a.extend(b)

a为原列表,b为要添加的列表,执行后直接将b加到a后。

2.修改元素
修改列表中的元素只需通过索引获取该元素,然后在为其重新赋值即可。例子如下:

a = [1,2,3,4,5,6]
a [2] = "521"      #修改第三个元素
print(a)

结果为:[1, 2, ‘521’, 4, 5, 6],更改成功

3.删除元素
(1)根据索引删除
可以使用del语句删除,例子如下:

a = [1,2,3,4,5]
del a[-1]     #删除最后一个元素
print(a)      #输出结果为[1, 2, 3, 4]

(2)根据元素值删除
如果想要删除一个不确定其位置的元素(即根据元素值删除),可以使用列表对象的remove()方法实现。看下面的代码:

a = [1,2,3,4,5,6]
a.remove("6")

此代码无指定的元素,会出现如下的报错:
a.remove(“6”)
ValueError: list.remove(x): x not in list
所以在使用remove()时,要先确定是否有此元素,改进的代码如下:

a = [1,2,3,4,5,6]
value = 3                #指定要移除的元素
if a.count(value) > 0:   #判断要删除的元素是否存在
    a.remove(value)      #移除指定元素
    print(a)             #结果为[1, 2, 4, 5, 6]

其中count()方法用于判断指定元素出现的次数,返回结果为0时,表示不存在该元素。

4.2.5对列表进行统计计算
1.获取指定元素出现的次数
使用count()方法获取指定元素出现的次数,语法格式如下:

listname.count(obj)
#参数说明
     #listname表示列表名称
     #obj表示要判断是否存在的对象,只能精准匹配,不能是元素的一部分
     #返回值:元素在列表中出现的次数。

例子如下:

a = [1,1,2,2,2,5,6,9,5,87,5]
num = a.count(5)
print(num)        #结果为3

2.获取指定元素首次出现的下标
使用index()方法索引,其语法格式为:

listname.index(obj)
#参数说明
    #listname:表示列表的名称
    #obj:表示要查找的对象,这里只能进行精准的匹配。如果指定的对象不存在时,则抛出异常
    #返回值:首次出现的索引值

例子如下:

a = [1,2,3,2,2,2,2,4,5,6,5,1,6]
b = a.index(6)
print(b)      #结果为9,6在a列表首次出现的索引位置是9

3.统计数值列表的元素和
在Python中可使用sum()函数统计数值列表中各元素和,语法格式如下:

sum(iterable[,start])
#参数说明
    #iterable:表示要统计的列表
    #start:表示统计结果是从哪个数开始,是可选参数,如果无指定,默认为0

举例如下:

a = [1,2,1,2,3,3,6]
b = sum(a)
print(b)    #结果为18

4.2.6对列表进行排序
1.使用列表对象的sort()方法实现

listname.sort(key=None,reverse=False)
#参数说明
    #listname:表示进行排序的列表
    #key:表示指定一个从每个列表元素提前一个用于比较的键
    #reverse:可选参数,指定为True,表示降序排列,指定为False,表示升序排列。默认为升序

例子如下:

a = [1,2,5,3,9,6]
a.sort()
print(a)       #结果为[1, 2, 3, 5, 6, 9]
a.sort(reverse=True)
print(a)       #结果为[9, 6, 5, 3, 2, 1]

使用sort()方法进行数值列表比较简单,接下来用下字符串排序:
采用的规则是先对大写字母排序,再对小写字母排序

char = ['cat','Tom','Angela','English']
char.sort()       #默认区分字母大小
print(char)
char.sort(key=str.lower)
print(char)

结果为:
[‘Angela’, ‘English’, ‘Tom’, ‘cat’]
[‘Angela’, ‘cat’, ‘English’, ‘Tom’]
采用sort()方法对列表进行排序时,对于中文支持不好。排序的结果与我们常用的音序排序法或者笔画排序法都不一致。如果需要实现对中文内容列表排序,还需要重新编写相应的方法进行处理,不能直接使用sort()方法。

2.使用内置的sorted()函数实现
使用该函数排序,列表的元素顺序不变,语句如下:

sorted(iterable,key=None,reverse=False)
#参数说明
    #iterable:列表名称
    #key:用于指定排序规则
    #reverse:可选参数,指定为True,表示降序排列,指定为False,表示升序排列。默认为升序

例子如下:

a  = [12,25,65,77,69,96]
b = sorted(a)
print(b)
print(a)     #创建副本一般,原列表不变

4.2.7列表推导式
使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。列表推导式常用语法格式有以下几种。
(1)生成指定范围内的数值列表,语法如下:

list = [Expression for var in range]
#参数说明
    #list:生成的表的名称
    #Expression:表达式,用于计算新列表的元素
    #var:循环变量
    #range:采用range()函数生成range对象

例子如下:
生成一个包括10个随机数的列表,范围在1-100(包括)之间

import random        #导入random标准库
randomnumber = [random.randint(1,100) for i in range(10)]
print(randomnumber)

结果为:[64, 83, 63, 70, 61, 6, 58, 42, 54, 87]

(2)根据列表生成指定需求的列表,语法如下:

newlist = [Expression for var in list]
#参数说明
    #newlist:新生成的列表名称
    #Expression:表达式,用于计算新列表元素
    #var:变量,值为后面列表的每个元素值
    #list:用于新生成的列表的原列表

例子:
定义一个记录商品价格的列表,应用列表推导式生成一个商品打6折的列表

price = [1300,569,8565,9514,6325]
sale = [x*0.6 for x in price]
print("原价格:",price)       #结果为原价格: [1300, 569, 8565, 9514, 6325]
print("6折价格:",sale)       #结果为6折价格: [780.0, 341.4, 5139.0, 5708.4, 3795.0]

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

newlist = [Expression for var in list if condition]
#参数说明
    #newlist:新生成的列表名称
    #Expression:表达式,用于计算新列表元素
    #var:变量,值为后面列表的每个元素值
    #list:用于新生成的列表的原列表
    #condition:条件表达式,用于指定筛选条件

例子:定义一个商品价格的列表,应用列表推导式生成一个商品价格高于5000的列表

price = [1300,569,8565,9514,6325]
sale = [x for x in price if x>5000]
print("原价格:",price)       #结果为原价格: [1300, 569, 8565, 9514, 6325]
print("价格高于5000的:",sale) #结果为价格高于5000的: [8565, 9514, 6325]