零基础Python完全自学教程15:Python中的列表

    时间: 浏览:2222次  来源:站长在线
欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第15课《 Python中的列表 》。本节课是一个大课,我分了这些知识点进行详细讲解:列表的创建和删除、访问列表元素、遍历列表、添加列表元素、修改列表元素、删除列表元素、对列表进行统计和计算、对列表进行排序、列表推导式、二维列表的创建访问应用。

欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础 Python完全自学教程》今天给大家分享的是第15课《 python中的列表 》。本节课是一个大课,我分了这些知识点进行详细讲解:列表的创建和删除访问列表元素遍历列表添加列表元素修改列表元素删除列表元素对列表进行统计和计算对列表进行排序列表推导式二维列表的创建访问应用


听歌有歌曲列表,网站里面的分类目录页里面有文章列表,所以列表对于大家来说并不陌生。

Python中,列表是由一系列的特定顺序排列的元素。它是Python中内置的可变序列。

在形式上,列表的所有元素都放在一对中括号“[]”里面,两个相邻的元素之间,使用英文逗号“,”隔开。

在内容上,列表可以将整数实数字符串、列表、元组字典集合等任何类型的元素放入列表中,并且同一列表中,元素的类型可以不同。

下面本节课对列表相关的知识点进行整理、说明:

15.1、Python中列表的创建和删除

在Python中创建列表方法主要有以下几种:

15.1.1、在Python中使用赋值运算符“=”创建列表:

在Python中,创建列表可以使用赋值运算符“=”创建列表,右边是赋值,左边是变量。具体语法如下:

listname = [element 1 , element 2 , element 3 , ... , element n]

其中,listname 表示列表的名称,可以是任何符合Python命名规则的标识符;element 1 , element 2 ,表示列表中的元素,这些元素的数量没有限制,内容上只要是Python中支持的数据类型如整数、实数、字符串、列表、元组都可以。

如下面的都是合法的列表:

shuzi = [1,2,3,4,5,6,7]                                                     #数字
shige = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"]               #诗歌
hunhe = [66,"Python",'人生苦短,我用Python',["web开发","云计算","爬虫"]]    #混合字符串
python = ['优雅',"明确",'''简单''']

在实际使用的时候,我们通常是只是放相同的类型的数据放在一个列表里面,如上面的shizi,shige,python都是相同的数据类型,而hunhe的字符串是混合的,可读性差,估计连自己都不知道什么意思。

15.1.2、在Python中创建空的列表[]

在Python中,是可以创建空的列表的,如创建一个空列表代码如下

kong = []

15.1.3、在Python中使用list() 函数创建数值列表

在Python中,可以使用list() 函数直接将range()函数循环出来的结果转换为列表。

我们先回顾一下range()函数的使用方法:(在《Python中的循环语句》里面学过)

range(start,end,step)

参数说明如下:

start:用于指定技术的起始值,可以省略。如果省略则从0开始。

end:用于指定计数的结束值,不能省略。结束值不包括该值,如range(100),则表示值为0~99。当range()函数只有一个参数时,即表示指定计数的结束值。

step:用于指定步长,即两个数之间的间隔,可以省略。如果省略则表示步长为1。如range(1,7)则表示值为1、2、3、4、5、6

list() 函数用法如下:

list(data)

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

如:创建一个0~20(不包括20)的所有偶数列表,可以使用以下代码

list(range(0,20,2))

运行结果如下:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> 

注:使用list() 函数不仅可以通过range对象创建列表,还可以通过其他的函数对象创建列表。其他函数在后面慢慢会学到的。

15.1.4、在Python中删除列表

在Python中,删除已经创建的列表是很简单的,使用 del 命令即可,语法格式如下:

del 列表名称

如:删除一个叫做 shige 的列表:

shige = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"] 
del shige

但是,如果你删除的是一个不存在的列表,就会报错,如:

shige = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"] 
del sg

当然上面不管是定义了shige 还是没有定义shige 的列表,都是一样,删除sg列表都是不存在的,报错结果如下:

Traceback (most recent call last):
  File "D:\Python\Python310\Doc\000.py", line 1, in <module>
    del sg
NameError: name 'sg' is not defined
>>> 

实际开发中并不经常使用 del 来删除列表,因为 Python 自带的垃圾回收机制会自动销毁无用的列表,即使开发者不手动删除,Python 也会自动将其回收。

15.2、在Python中访问列表元素

在Python中,如果将列表中的内容输出是比较简单的,使用print()函数即可。

如:我们输出上个知识点的内容中的混合的hunhe列表,只要使用函数print(hunhe)即可

shuzi = [1,2,3,4,5,6,7]                                                    #数字
shige = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"]               #诗歌
hunhe = [66,"Python",'人生苦短,我用Python',["WEB开发","云计算","爬虫"]]    #混合字符串
python = ['优雅',"明确",'''简单''']                                         
print(hunhe)

执行结果如下:

[66, 'Python', '人生苦短,我用Python', ['WEB开发', '云计算', '爬虫']]
>>> 

输出python如下:

['优雅', '明确', '简单']
>>> 

经过对比,不是 输入的是 单引号双引号、三引号 ,输出的都是 单引号。

通过上述的输出,我们发现,在输出列表时,包括了两侧的中括号[]的。

列表是一个有序的集合,所以要访问列表中的任何元素,您只需要告诉Python元素的位置(索引)。要访问列表元素,首先指出列表的名称,然后指出元素在列表中的位置。

下面,我们来输出混合列表中的第3个元素,代码如下:

hunhe = [66,"Python",'人生苦短,我用Python',["WEB开发","云计算","爬虫"]] 
print(hunhe[2])

输出的结果为:

人生苦短,我用Python
>>> 

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

实例:我们来输出每日一语。

import datetime                    #导入日期时间类
mot = ["信任是最稀缺的货币。",     #定义一个列表
       "追求快速,反而死的很惨;有时候,慢也就是快!", 
       "改编是一门技术,学会改编技术,就会改字成金,这辈子不会缺钱。",
       "流量是天然存在的,客户是天然存在的,方法是天然存在的。",
       "你的每一个时间都很珍贵,都要放在最有生产力的事情上。",
       "万物皆不为我所有,万物皆为我所用。",
       "钻石就在你家后院,秘笈就在你的眼前,你却每天视而不见。"]
day=datetime.datetime.now().weekday()      #获取当前星期
print(mot[day])                            #输出每日一语

说明:在上述代码中,datetime.datetime.now()用于获取当前日期,weekday()再则是从日期时间对象中获取星期,其值为0~6中的一个,0位星期一,6为星期日。

在2021年10月31日的运行结果为:

钻石就在你家后院,秘笈就在你的眼前,你却每天视而不见。
>>> 

本知识点中是通过索引(index)的方式访问列表元素的,大家可以通过切片的方式,访问列表元素哦。

15.3、在Python中遍历列表

我们先解释一下遍历的意思,遍就是全面,到处的意思,历就是行、游历的意思。所谓遍历就是全部走遍,到处周游的意思。

遍历列表就是从头到尾依次从列表中获取数据。

遍历列表中的所有元素是常用的操作,在遍历的过程中可以完成查询、处理等功能。

在Python中,遍历列表的方法有很多种,下面介绍一些常用的遍历方法:

15.3.1、直接使用for循环遍历列表

直接使用for循环遍历列表,只能输出元素的值,语法格式如下:

for 变量元素 in 列表:
   #输出变量元素

列如,定义python的设计理念,然后通过for循环遍历该列表,并输出每条内容。代码如下:

print("Python设计理念")
python = ["优雅","明确","简单"]
for linian in python:
    print(linian)

执行以后结果如下:

Python设计理念
优雅
明确
简单
>>> 

15.3.2、使用for循环和enumerate()函数遍历列表

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

for index,变量元素 in enumerate(列表)
    #输出index和变量元素

例如,定义python的设计理念,然后通过for循环和enumerate()函数遍历该列表,并输出索引和每条内容。代码如下:

print("Python设计理念")
python = ["优雅","明确","简单"]
for index,linian in enumerate(python):
    print(index,linian)

执行结果如下:

Python设计理念
0 优雅
1 明确
2 简单
>>> 

15.3.3、使用for循环和list()函数遍历列表

例如,定义python的设计理念,然后通过for循环和list()函数遍历该列表,并输出每条内容。代码如下:

print("Python设计理念")
python = ["优雅","明确","简单"]
for linian in list(python):
    print(linian)

执行结果如下:

Python设计理念
优雅
明确
简单
>>> 

15.3.4、使用for循环和range()函数遍历列表

定义,列表number 的列表,然后通过for循环和range()函数遍历该列表,并输出每条内容。代码如下:

number = [1122,2366,4400,5577,8888]
for i in range(len(number)):
    print(i,number[i])

执行结果为:

0 1122
1 2366
2 4400
3 5577
4 8888
>>> 

可以不带索引输出,代码为:

number = [1122,2366,4400,5577,8888]
for i in range(len(number)):
    print(number[i])

运行结果为:

1122
2366
4400
5577
8888
>>> 

我们把输出的结果,放在同一行,代码为:

number = [1122,2366,4400,5577,8888]
for i in range(len(number)):
    print(number[i],end=" ")

执行结果为:

1122 2366 4400 5577 8888 
>>> 

注意 range()函数只能用于数字的列表,在非数字中就会报错了。

15.3.5、使用for循环和iter()函数遍历列表

列如,定义python的设计理念,然后使用for循环和iter()函数遍历该列表,并输出每条内容。代码如下:

print("Python设计理念")
python = ["优雅","明确","简单"]
for linian in iter(python):
    print(linian)

输出结果如下:

Python设计理念
优雅
明确
简单
>>> 

15.3.6、使用while循环遍历列表

定义,列表number 的列表,然后通过while循环遍历列表并输出每条内容。代码如下:

number = [1122,2366,4400,5577,8888]
i = 0
while i < len(number):
    print(number[i])
    i = i + 1

运行结果如下:

1122
2366
4400
5577
8888
>>> 

15.4、添加列表元素

15.4.1、在Python中使用append()方法添加列表元素

我们在《Python中的序列相加详解》一节中说过:在Python中,序列相加支持两种或者两种以上的相同类型的序列相加。即两个或者两个以上的序列进行连接。但是不会去除重复的元素。操作方法:序列相加是使用“+”号运算符实现的。

其实不仅仅序列相加可以使用“+”号运算符实现,在Python中添加列表元素也可以使用“+”号运算符实现。但是,这种添加方法执行速度比Python内置函数APPend()函数添加列表对象要慢。通常情况下,我们在添加列表元素的时候,使用列表对象的append()方法来实现。列表对象的 append()方法用于在列表末尾添加元素,语法如下:

listname.append(obj)

其中,listname为要添加元素的列表名称;obj为要添加到末尾的对象。

如,定义一个3个数的元素列表,然后使用append()方法向该列表的末尾添加一个元素,可以使用下面代码

sousuo = ["baidu","sogou","bing"]
sousuo.append("Google")
print("更新后列表:",sousuo)

执行代码以后结果为:

更新后列表: ['baidu', 'sogou', 'bing', 'google']
>>> 

15.4.2、在Python中使用extend()方法添加列表元素

上面讲的是使用append()方法在列表末添加列表元素,如果将一个列表的全部元素,添加到另一个列表中,则使用列表对象的extend()方法添加列表元素。extend()方法具体的语法如下:

listname.extend(seq)

其中,listname为原列表;seq为要添加的列表。语句执行以后,seq的内容将追加到listname的后面。

列如,创建两个列表,然后使用append()方法将第一个列表添加到第二个列表中,具体代码如下:

s1 = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"]
s2 = ["唐","李白","静夜思"]
s2.extend(s1)
print(s2)

运行结果为:

['唐', '李白', '静夜思', '床前明月光', '疑是地上霜', '举头望明月', '低头思故乡']
>>> 

15.4.3、在Python中使用insert()方法添加列表元素

append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中间某个位置插入元素,那么可以使用 insert() 方法。

insert() 的语法格式如下:

listname.insert(index , obj)

其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。

当插入列表或者元组时,insert() 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append() 是一样的。

列如,定义一个3个数的元素列表,然后使用insert() 方法向该列表的中间添加一个元素,可以使用下面代码:

sousuo = ["baidu","sogou","bing"]
sousuo.insert(2,["google","360"])  #在第3的位置插入列表,整个列表被当成一个元素
print("更新后列表:",sousuo)

执行结果为:

更新后列表: ['baidu', 'sogou', ['google', '360'], 'bing']
>>> 

15.5、修改列表元素

在Python中修改列表元素有两种情况,一个是修改单个元素,一个是修改一组元素。现在站长在线分别讲解:

15.5.1、在Python中修改单个元素

修改单个元素非常简单,直接对元素赋值即可。使用索引得到列表元素后,通过“=”赋值符就改变了元素的值。

请看下面的例子:

num = [88, 66, 33, 17, 99, 28, 18]
num[2] = 56  #使用正数索引
num[-3] = -5  #使用负数索引
print(num)

运行结果如下:

[88, 66, 56, 17, -5, 28, 18]
>>> 

15.5.2、在Python中修改一组元素

Python 支持通过切片语法给一组元素赋值。在进行这种操作时,如果不指定步长(step 参数),Python 就不要求新赋值的元素个数与原来的元素个数相同;这意味,该操作既可以为列表添加元素,也可以为列表删除元素

num = [88, 66, 33, 17, 99, 28, 18]
#修改第 3~6 个元素的值(不包括第6个元素)
num[3:6] = [56,17,-5]
print(num)

运行结果如下:

[88, 66, 33, 56, 17, -5, 18]
>>> 

如果对空切片(slice)赋值,就相当于插入一组新的元素:

num = [88, 66, 33, 17, 99, 28, 18]
#在5个元素处插入新元素
num[4:4] = [56,17,-5]
print(num)

运行结果:

[88, 66, 33, 17, 56, 17, -5, 99, 28, 18]
>>> 

使用切片语法赋值时,Python 不支持单个值,例如下面的写法就是错误的:

num = [88, 66, 33, 17, 99, 28, 18]
#在5个元素处插入新元素
num[4:4] = 100
print(num)

报错如下:

Traceback (most recent call last):
  File "D:\Python\Python310\Doc\000.py", line 3, in <module>
    num[4:4] = 100
TypeError: can only assign an iterable
>>> 

但是如果使用字符串赋值,Python 会自动把字符串转换成序列,其中的每个字符都是一个元素,请看下面的代码

s = list("Hello Python")
s[6:12] = "XYZ"
print(s)

执行结果如下:

['H', 'e', 'l', 'l', 'o', ' ', 'X', 'Y', 'Z']
>>> 

使用切片语法时也可以指定步长(step 参数),但这个时候就要求所赋值的新元素的个数与原有元素的个数相同,例如:

num = [88, 66, 33, 17, 99, 28, 18]
#步长为2,为第1、3、5个元素赋值
num[1: 6: 2] = [55, -55, 59.5]
print(num)

运行结果为:

[88, 55, 33, -55, 99, 59.5, 18]
>>> 

15.6、除列表元素

在 Python 列表中删除元素主要分为以下 3 种场景(共4种方法):

a、根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法。

b、根据元素本身的值进行删除,可使用列表提供的 remove() 方法。

c、将列表中所有元素全部删除,可使用列表提供的 clear() 方法。

下面针对这3种场景的4种方法进行一一讲解:

15.6.1、del:根据索引值删除元素

del 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。

我们已经在《Python中列表的创建和删除详解》中讲解了如何删除整个列表,所以本节只讲解如何删除列表元素。

del 可以删除列表中的单个元素,其语法格式为:

del listname[index]

其中,listname 表示列表名称,index 表示元素的索引值。

列如,定义一个保存一个3个元素的列表,删除其中的一个元素,代码为:

sousuo = ["baidu","sogou","bing"]
del sousuo[0]    #删除第一个,正数索引
#del sousuo[1]    #删除第二个
#del sousuo[-1]   #删除最后一个,负数索引
print(sousuo)

执行结果为:

['sogou', 'bing']
>>> 

看见了吧,我上面写代码的时候使用#代码 注释了第三行和第四行的,要不然去掉注释,执行下来,一个元素都不剩了,只是剩下[]了。

del 也可以删除中间一段连续的元素,格式为:

del listname[start : end]

其中,start 表示起始索引,end 表示结束索引。del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素。

列如,定义一个保存5个元素的列表,删除其中的第2~4个,不包括第4个,代码如下:

jianzhan = ["Python","html","php","css","mysql"]
del jianzhan[1:3]
print(jianzhan)

执行结果为:

['Python', 'CSS', 'MySQL']
>>> 

当然,也可以定义一个保存5个元素的列表,删除其中的第2~4个,包括第4个,代码如下:

jianzhan = ["Python","html","php","CSS","MySQL"]
del jianzhan[1:4]
print(jianzhan)

执行结果如下:

['Python', 'MySQL']
>>> 

15.6.2、pop():根据索引值删除元素

15.6.2.1、描述:pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

15.6.2.2、语法:pop()方法语法如下:

list.pop(-1)

15.6.2.3、参数:可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。

15.6.2.4、返回值:该方法返回从列表中移除的元素对象。

15.6.2.5、实例:

sousuo = ["baidu","sogou","bing"]
ss = sousuo.pop(1)  #删除列表中的第二个元素
print("删除的项为 :", ss)
print("列表现在为 : ", sousuo)

运行结果如下:

删除的项为 : sogou
列表现在为 :  ['baidu', 'bing']
>>> 

15.6.3、remove():根据元素值进行删除

15.6.3.1、描述:remove() 函数用于移除列表中某个值的第一个匹配项。(而且必须保证该元素是存在的。)

15.6.3.2、语法:list.remove(obj)其中list为列表,obj为列表中要移除的对象。

15.6.3.3、返回值:该方法没有返回值但是会移除列表中的某个值的第一个匹配项。

15.6.3.4、实例:remove() 方法使用示例操作:

num = [88, 66, 33, 17, 66, 28, 18]
num.remove(66) #第一次删除66
print(num)
num.remove(66) #第二次删除66
print(num)
num.remove(99) #删除99
print(num)

执行结果如下:

[88, 33, 17, 66, 28, 18]
[88, 33, 17, 28, 18]
Traceback (most recent call last):
  File "D:\Python\Python310\Doc\000.py", line 6, in <module>
    num.remove(99) #删除99
ValueError: list.remove(x): x not in list
>>> 

最后一次删除,因为 99 不存在导致ValueError异常,所以我们在使用 remove() 删除元素时最好提前判断一下元素是否存在,改进后的代码如下:

num = [88, 66, 33, 17, 66, 28, 18]
num.remove(66) #第一次删除66
print(num)
num.remove(66) #第二次删除66
print(num)
if num.count(99)>0:  #判断要删除的元素99是否存在
    num.remove(99)   #指定删除99
print(num)

执行结果如下:

[88, 33, 17, 66, 28, 18]
[88, 33, 17, 28, 18]
[88, 33, 17, 28, 18]
>>> 

说明:列表对象的count()方法是用于判断指定的元素出现的次数返回的结果为0时,不是不存在该元素。关于count()方法的详细介绍,我们在下一个知识点《在Python中对列表进行统计计算详解》中会有详细说明。

15.6.4、clear():删除列表所有元素

在Python clear() 用来删除列表的所有元素,即清空列表,请看下面的代码:

s = ["床前明月光","疑是地上霜","举头望明月","低头思故乡"]
s.clear()
print(s)

运行结果为:

[]
>>> 

15.7、在python中对列表进行统计和计算

15.7.1、在Python中使用count()方法获取指定的元素的出现次数。

我们在前面学过通过len()函数计算列表的长度,但是他是不管也没有重复的,而今天要讲的,使用列表对象的count()方法可以获取指定元素在列表中出现的次数。count()方法的数值类型语法格式如下:

listname.count(obj)

其中,listname代表列表的名称;obj表示要被判断出现次数的对象,这里是指精确匹配,而不是是元素值的一部分。

例如,创建一个8个数值的数列列表,使用count()方法统计数值出现的次数。代码如下:

s = [66,88,13,59,66,39,100,59]
s1 = s.count(66)
s2 = s.count(88)
s3 = s.count(99)
print("66出现的次数:",s1)
print("88出现的次数:",s2)
print("99出现的次数:",s3)

运行结果如下:

66出现的次数: 2
88出现的次数: 1
99出现的次数: 0
>>> 

count()方法除了统计数值型列表,还是可以统计字符串里某个字符串或子字符串出现的次数,如果没有就返回为0。可选参数为在字符串搜索的开始与结束位置。

语法如下:

str.count(sub,start,end)

此方法中,各参数的具体含义如下:

str:表示原字符串;

sub:表示要检索的字符串;

start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;

end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。

列如:检索字符串“olzz.com/xuetang/python”中,“/”的出现次数。

str = "olzz.com/xuetang/python"
num = str.count('/')
print("'/'出现的次数:",num)

运行结果为:

'/'出现的次数: 2
>>> 

下面我们指定字符串的起址位置:

str = "olzz.com/xuetang/python"
num = str.count('/',1,10)  #指定'/'在第2个到第11个字符之间
print("'/'出现的次数:",num)

运行结果为:

'/'出现的次数: 1
>>> 

15.7.2、在Python中使用index()方法获取指定元素首次出现的位置

在Python列表对象的index()方法可以获取指定元素在列表中首次出现的位置(索引),在数值类型的语法格式如下:

listname.index(obj)

参数说明:

listname:表示列表的名称。

obj:表示要查找的对象(精确匹配)。

返回值:首次出现的索引值。

s = [66,88,13,59,66,39,100,59]
s1 = s.index(66)
s2 = s.index(59)
print("66首次出现的索引位置:",s1)
print("59首次出现的索引位置:",s2)

运行结果如下:

66首次出现的位置: 0
59首次出现的位置: 3
>>> 

如果索引的值,列表里面,就会抛出异常:

s = [66,88,13,59,66,39,100,59]
s3 = s.index(77)
print("77首次出现的索引位置:",s3)

运行结果为:

Traceback (most recent call last):
  File "D:\Python\Python310\Doc\000.py", line 2, in <module>
    s3 = s.index(77)
ValueError: 77 is not in list
>>> 

和上方的count()方法一样,index()方法可以用于数值型的检索,也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。(count()方法出现次数为0,而不是异常)。

str.index(sub,start,end)

此方法中,各参数的具体含义如下:

str:表示原字符串;

sub:表示要检索的字符串;

start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;

end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。

列如:检索字符串“olzz.com/xuetang/python”中,“/”首次出现的位置。

str = "olzz.com/xuetang/python"
num = str.index('/')
print("'/'首次出现的位置:",num)

执行结果如下:

'/'首次出现的位置: 8
>>> 

下面我们指定字符串的起址位置:

str = "olzz.com/xuetang/python"
num = str.index('/',1,10)  #指定'/'在第2个到第11个字符之间
print("'/'首次出现的位置:",num)

执行结果:

'/'首次出现的位置: 8
>>> 

执行结果是一样的,因为我指定的位置是一样,现在我来指定到后面这个区域,使用负数索引:

str = "olzz.com/xuetang/python"
num = str.index('/',-10,-1)  #指定'/'在最后一个到最后10个字符之间
print("'/'首次出现的位置:",num)

运行结果如下:

'/'首次出现的位置: 16
>>> 

这个结果是从左到右的,因为指定区域排除了第8个,所以满足要求的是第16个了。

15.7.3、在Python中使用sum()函数统计数值列表的元素和

在讲count()方法和index()方法的时候,我是把数值和字符串,分开讲解的,因为使用数值的方法比字符串的方法要简单。

但是在sum()函数中,只能统计数值了。语法格式如下:

sum(iterable[, start])

相关说明如下:

iterable:可迭代对象,如:列表、元组、集合。

start:指定相加的参数,如果没有设置这个值,默认为0。

下面各种对象之间求和举例:

>>> sum([0,1,2])            # 列表求和
3  
>>> sum((0,1,2,3),1)        # 元组计算总和后再加 1
7
>>> sum([0,1,2,3,4],2)      # 列表计算总和后再加 2
12
>>>

实例:某中学校长随机抽查了初三1班的10名男学生的数学成绩,和10名女学生的数学成绩,然后应用sum()函数计算男学生和女学生的成绩之和。对应的代码如下:

s1 = [93,95,86,98,99,99,89,100,100,97]  #10名男学生的数学成绩列表
s2 = [98,96,86,88,96,100,93,87,95,95]   #10名女学生的数学成绩列表
z1 = sum(s1)
z2 = sum(s2)
print("10名男学生的数学总分数为:",z1)
print("10名女学生的数学总分数为:",z2)

运行结果为:

10名男学生的数学总分数为: 956
10名女学生的数学总分数为: 934
>>> 

15.8、在python中对列表进行排序

在Python实际开发中,会经常需要用到对列表进行排序。下面站长在线对列表的排序讲解几种常用的方法:

15.8.1、使用列表对象的sort()方法进行排序。

列表对象提供了sort()方法用于对原列表中的元素进行排序。排序以后,原列表中的元素顺序将发生改变。列表对象的sort()方法的语法格式如下:

listname.sort(key=None,reverse=False)

相关的参数说明如下:

listname:表示要进行排序的列表。

key:表示指定一个从每个列表元素中提取一个比较键。(列如,设置“key=str.lower”表示在排序时不区分字母的大小写)。

reverse:可选参数,如果将其值指定为True,则表示降序排序;如果将其指定为False,则表示升序排列。默认为升序排列。

列如,某中学初三1班的10名男学生的数学成绩,然后应用sort()方法对其进行排序,代码如下:

s = [93,95,86,98,99,99,89,100,100,97]
print("原列表:",s)
s.sort()
print("升序:",s)
s.sort(reverse=True)
print("降序:",s)

执行结果如下:

原列表: [93, 95, 86, 98, 99, 99, 89, 100, 100, 97]
升序: [86, 89, 93, 95, 97, 98, 99, 99, 100, 100]
降序: [100, 100, 99, 99, 98, 97, 95, 93, 89, 86]
>>> 

使用sort()方法除了可以对数值进行排序,还可以多字符串进行排序。对字符串进行排序默认区分大小写,如果想不区分大小写,则需要指定其key参数。

列如,定义保存一个大小写不同的英文字符串列表,然后应用sort()方法对其进行排序,代码如下:

s = ['hello','polly','Lucy','Lily','Han Meimei']
s.sort()
print("区分字母大小写:",s)
s.sort(key=str.lower)
print("不区分字母大小写:",s)

运行结果如下:

区分字母大小写: ['Han Meimei', 'Lily', 'Lucy', 'hello', 'polly']
不区分字母大小写: ['Han Meimei', 'hello', 'Lily', 'Lucy', 'polly']
>>> 

说明:sort()方法对列表排序时,最中文的支持不好,排序的结果与我们常用的按拼音排序或者笔画排序都不一致。要想实现对中文内容的排序,需要重新编写相应的方法,不能直接使用sort()方法。如:

s = ['张三','李四','王五','李明','杨军']
s.sort()
print(s)

运行结果:

['张三', '李四', '李明', '杨军', '王五']
>>> 

这个结果,我们根本看不懂,所以不能直接使用sort()方法对中文列表排序。

15.8.2、使用内置的sorted()函数进行排序。

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

sorted(iterable,key=None,reverse=False)

相关的参数说明如下:

iterable:表示要进行排序的列表。

key:表示指定从每个列表元素中提取一个比较键。(列如,设置“key=str.lower”表示在排序时不区分字母的大小写)。

reverse:可选参数,如果将其值指定为True,则表示降序排序;如果将其指定为False,则表示升序排列。默认为升序排列。

列如,某中学初三1班的10名男学生的数学成绩,然后应用sorted()函数对其进行排序,代码如下:

s = [93,95,86,98,99,99,89,100,100,97]
s1 = sorted(s)
print("升序:",s1)
s2 = sorted(s,reverse=True)
print("降序:",s2)
print("原列表:",s)

运行结果如下:

升序: [86, 89, 93, 95, 97, 98, 99, 99, 100, 100]
降序: [100, 100, 99, 99, 98, 97, 95, 93, 89, 86]
原列表: [93, 95, 86, 98, 99, 99, 89, 100, 100, 97]
>>> 

说明:

列表对象的sort()方法和sorted()函数的作用基本相同。不同的地方有以下两点:

a、sort()方法只能处理列表类型数据的排序;sorted()函数则可以处理多种类型数据的排序。

b、sort()方法会修改原来的列表的元素的排序;sorted()函数不会修改原来的数据,会建立一个原列表的副本,只是返回一个排序后的列表。

15.8.3、使用reverse()方法进行反向排序。

我们在使用sort()方法和sorted()函数的时候,在处理升序和降序的时候用到了reverse。

reverse是反转,相反,背面,反面的意思。其实还有一种特殊的排序就是反向排序。相关代码如下:

s = [93,95,86,98,99,99,89,100,100,97]
python = ["优雅","明确","简单"]
s.reverse()
python.reverse()
print(s)
print(python)

运行结果如下:

[97, 100, 100, 89, 99, 99, 98, 86, 95, 93]
['简单', '明确', '优雅']
>>> 

在实际的Python开发中,使用reverse()方法进行反向排序,很多的教程中,没有提及了。因为使用的比较少。

15.9、在python中的列表推导式

含义:列表推导式(list comprehension)也称为列表解析式,就是可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。

列表推导式,通常有以下几种类型的语法格式:

15.9.1、生成指定范围的数值列表,语法格式如下:

list = [Expression for var in range]

 详细参数说明:

list:表示生成的列表名称

Expression:表达式,用于计算新列表的元素

var:循环变量

range:采用range()函数生成的range对象

例如,生成一个10以内的序列,和10以内的偶数序列

a1 = [i for i in range(10)]               #生成一个10以内的序列
a2 = [i for i in range(10) if i % 2 == 0] #生成一个10以内的偶数序列
print(a1)
print(a2)

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
>>> 

再来看一个例子:10以内的平方数,代码如下:

s = [i**2 for i in range(10)]
print(s)

运行结果如下:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> 

上面的比较简单,下面我们再来一个,生成10以内的5个随机数列表,代码如下:

import random        #导入random标准库
s = [random.randint(0,10) for i in range(5)]
print("生成的5个随机数为:",s)

运行以后结果为:

生成的5个随机数为: [6, 4, 7, 5, 0]    #多次运行,结果都不一样,随机生成
>>> 

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

newlist = [Expression for var in list]

 详细参数说明如下:

newlist:表示新生成的列表名称

Expression:表达式,用于计算新列表的元素

var:变量,值为后面列表的每个元素值

list:用于生成新列表的原列表

列如,定义一个序列商品的进货价,然后应用列表推导式生成一个全部翻倍的零售价,代码如下:

jinhuo = [5,2,8,6,6,10,15,5]
lingshou = [int(i*2) for i in jinhuo]
print("进货价:",jinhuo)
print("零售价:",lingshou)

运行结果如下:

进货价: [5, 2, 8, 6, 6, 10, 15, 5]
零售价: [10, 4, 16, 12, 12, 20, 30, 10]
>>> 

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

newlist = [Expression for var in list if condition]

详细参数说明如下:

newlist:表示新生成的列表名称

Expression:表达式,用于计算新列表的元素

var:变量,值为后面列表的每个元素值

list:用于生成新列表的原列表

condition:条件表达式,用于指定筛选条件

列如,定义一个序列商品的进货价,然后应用列表推导式生成一个进货价小于10的列表,代码如下:

jinhuo = [5,2,8,6,6,10,15,5]
s = [i for i in jinhuo if i<10]
print("进货价:",jinhuo)
print("进货价小于10的:",s)

运行结果如下:

进货价: [5, 2, 8, 6, 6, 10, 15, 5]
进货价小于10的: [5, 2, 8, 6, 6, 5]
>>> 

15.10、python中二维列表的创建、访问、应用

二维列表的概念:

二维列表是将其他列表当做列表的元素放在一个列表当中,也就是列表的嵌套。

站长在线温馨提示:二维列表是多维列表的基础,未来还会出现三维列表,四维列表等多维列表。

在Python中,创建二维列表有以下3种常用的方法:

15.10.1、直接定义二维列表。

在Python中,二维列表就是包含列表的列表。即一个列表的每个元素又都是一个列表。

在创建二维列表时,我们可以直接使用列表的语法格式,进行定义:

listname = [[元素11,元素12,元素13,......,元素1n],
            [元素21,元素22,元素23,......,元素2n],
            ......,
            [元素n1,元素n2,元素n3,......,元素nn]]

其中的相关参数说明如下:

listname:表示要生成的列表名称。

[元素11,元素12,元素13,......,元素1n]:表示二维列表的第1行(也是一个列表)。其中元素11代表第1行第1列,元素12代表第1行第2列,以此类推,直到元素1n代表第1行第n列。

[元素21,元素22,元素23,......,元素2n]:表示二维列表的第2行(也是一个列表)。其中元素21代表第2行第1列,元素22代表第2行第2列,以此类推,直到元素2n代表第2行第n列。

[元素n1,元素n2,元素n3,......,元素nn]:表示二维列表的第n行(也是一个列表)。其中元素n1代表第n行第一列,元素n2代表第n行第2列,以此类推,直到元素nn代表第n行第n列。

例如,定义一个某中学9年级1班3位同学的语数英的成绩列表,代码如下:

cj = [['名字','语文','数学','英语'],
      ['张三',88,98,95],
      ['李四',85,99,91],
      ['王五',86,88,89]]   
print(cj)

运行上面代码,创建的二维列表如下:

[['名字', '语文', '数学', '英语'], ['张三', 88, 98, 95], ['李四', 85, 99, 91], ['王五', 86, 88, 89]]
>>> 

15.10.2、使用嵌套的for循环创建二维列表。

在Python中,创建二维列表,可以使用嵌套的for循环来实现,如创建一个5行5列的二维列表,可以使用下面代码:

s = []                  # 创建一个空列表
for i in range(5):      # 创建一个5行的列表(行)
    s.append([])        # 在空的列表中添加空的列表
    for j in range(5):  # 循环每一行的每一个元素(列)
        s[i].append(j)  # 为内层列表添加元素
print(s)                # 输出列表

运行上面的代码,创建的二维列表如下:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> 

15.10.3、使用列表推导式创建二维列表。

我们刚刚在上一个知识点《在python中的列表推导式详解》学习过列表推导式。列表推导式就是可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。

在这里我们也可以使用列表推导式来创建二维列表,并且是被推荐的方法,而且语法简单。

比如使用列表推导式的方法创建一个5行5列的二维列表,代码如下:

s = [[j for j in range(5)] for i in range(5)]
print(s)

执行上面代码,创建的二维列表结果如下:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> 

15.10.4、二维列表的访问

我们在创建好二维列表以后,可以通过下列语法,对列表元素的访问:

listname[索引1][索引2]

其中,相关的参数说明为:

listname:表示列表的名称

索引1:列表中的行。索引值从0开始,即第一行是索引为0。(索引也称为下标,索引1也称为下标1)

索引2:列表中的列。索引值从0开始,即第一列是索引为0。(索引也称为下标,索引2也称为下标2)

如,定义一个二维列表,访问他的第1行,第5列,可以使用下面代码:listname[0,4]

s = [[j for j in range(5)] for i in range(5)]      # 定义一个5行5列的二维列表
print("5行5列的列表为:",s)                        # 输出二维列表
print("其中第1行,第5列为:",s[0][4])              # 输出第1行,第5列的元素

运行结果为:

5行5列的列表为: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
其中第1行,第5列为: 4
>>> 

15.10.5、二维列表的应用

使用二维列表输出不同版式的古诗《静夜思》

-- 横版 --

床前明月光

疑是地上霜

举头望明月

低头思故乡

-- 竖版 --

低举疑床

头头是前

思望地明

故明上月

乡月霜光

站长在线温馨提醒:横版是从左往右读,竖版是从右往左读的。

我们在IDLE中新建一个文件,在该文件中,定义4个字符串为《静夜思》的诗句,再定义一个二维列表,使用嵌套的for循环,将古诗以横版输出,再将二维列表进行逆序排列,最后使用嵌套的for循环,将古诗以竖版输出,代码如下:

str1 = '床前明月光'
str2 = '疑是地上霜'
str3 = '举头望明月'
str4 = '低头思故乡'
verse = [list(str1), list(str2), list(str3), list(str4)]   # 定义一个二维列表
print('\n-- 横版 --\n')
for i in range(4):                                         # 循环古诗的每一行
    for j in range(5):                                     # 循环每一行的每个字(列)
        if j == 4:                                         # 如果是一行中的最后一个字
            print(verse[i][j])                             # 换行输出
        else:
            print(verse[i][j], end='')                     # 不换行输出

verse.reverse()                                            # 对列表进行逆序排列
print('\n-- 竖版 --\n')
for i in range(5):                                         # 循环每一行的每个字(列)
    for j in range(4):                                     # 循环新逆序排列后的第一行
        if j == 3:                                         # 如果是最后一行
            print(verse[j][i])                             # 换行输出
        else:
            print(verse[j][i], end='')                     # 不换行输出

运行结果如下:

-- 横版 --

床前明月光
疑是地上霜
举头望明月
低头思故乡

-- 竖版 --

低举疑床
头头是前
思望地明
故明上月
乡月霜光
>>> 

原理解析:

15.10.5.1、先将古诗的每一行的字符串,使用list()函数转换成列表。列表代码如下:

[['床','前','明','月','光'],
 ['疑','是','地','上','霜'],
 ['举','头','望','明','月'],
 ['低','头','思','故','乡']]

15.10.5.2、列表对象的reverse()方法用于对列表进行逆向排序,将列表的最后一个移到第一个,倒数第二个移到第二个,以此类推。代码如下:

[['低', '头', '思', '故', '乡'],
 ['举', '头', '望', '明', '月'],
 ['疑', '是', '地', '上', '霜'],
 ['床', '前', '明', '月', '光']]

15.10.5.3、横版是按行打印,竖版却是按列打印,按列打印如下:

低举疑床
头头是前
思望地明
故名上月
乡月霜光

看见了吧,我们把读不通顺的,按列打印的“低举疑床,头头是前,思望地明,故名上月,乡月霜光”就正是我们要的按竖排打印的诗。竖排的写法是从右往左写的。读也从右边读起,就正是我们的想要的诗了。

以上10点实际上是分了10个文章才能讲解完毕,如果仅仅一节课来讲,写教程都要写三五天,而且学的时候,一天都不一定学得完,估计也得分三五天才能学完。

下节预告:零基础Python完全自学教程16:Python中的元组

相关阅读:

《零基础Python完全自学教程》目录汇总

站长百科词条:Python



本文地址:https://www.olzz.com/pythonliebiao.html
码字不易,打个赏呗
杨泽业感谢你的支持!

猜你喜欢

2024年11月23日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月23日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-21  分类:CN删除域名  浏览:8次


2024年11月22日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月22日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-20  分类:CN删除域名  浏览:13次


2024年11月21日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月21日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5声母cn和com.cn域名。

2024-11-19  分类:CN删除域名  浏览:98次


2024年11月20日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月20日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-18  分类:CN删除域名  浏览:51次


2024年11月19日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月19日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-17  分类:CN删除域名  浏览:63次


2024年11月18日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月18日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-16  分类:CN删除域名  浏览:30次


2024年11月17日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月17日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-15  分类:CN删除域名  浏览:36次


2024年11月16日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月16日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-14  分类:CN删除域名  浏览:159次


2024年11月15日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月15日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-14  分类:CN删除域名  浏览:195次


2024年11月14日删除的部分cn和com.cn域名列表cn

站长在线导读:2024年11月14日删除的部分cn和com.cn域名列表:一、4位以内纯数字cn和com.cn域名。二、3字母以内cn和com.cn域名。三、4字母cn和com.cn域名。四、5字母cn和com.cn域名。

2024-11-12  分类:CN删除域名  浏览:198次