我们上篇文章给大家介绍了Python的变量以及简单数据类型。主要包括一个Python文件在Python解析器的运行过程,以及Python常用的数据类型;例如字符串、整型、浮点数以及注释。本文给大家介绍Python中独有的数据类型——列表,首先给大家介绍列表的概念。
列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复数的名称是一个不错的主意。
在Python中,用方括号([])来表示列表,并用逗号来分割其中的元素。具体我们以下面的案例为主:
bicyles = ['trek','cannondle','redline','specialized']
print(bicyles)
具体执行的效果如下:
从上图我们可以看出,Python解析器把[]都打印出来了,这不是我们想要的,接下来,给大家介绍访问列表的元素。
列表是有序集合,因此要访问列表的任何位置,只需将该元素的位置或索引告诉Python即可。要访问列表元素,可以指出列表的名称,在指出元素的索引,并将其放在方括号内,具体遍历如下:
bicyles = ['trek','cannondle','redline','specialized']
print(bicyles)
print(bicyles[0])
具体执行的效果如下:
我们从上图可以得知:当我们在请求获取列表元素的时候,Python只返回该元素,而不包括方括号和引号;这种输出才是我们想要看到的结果——干净、整洁的输出。当然我们也可以通过上篇文章中介绍的title()
让结果格式更加的简洁,具体实现如下:
bicyles = ['trek','cannondle','redline','specialized']
print(bicyles)
print(bicyles[0])
print(bicyles[0].title())
在Python中,第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。如果结果出乎意料,请读者检查是否犯了简单的差一错误。
第二个列表元素的索引为1。根据这种简单的计数方式,要访问列表的任何元素,都可将其位置减1,并将结果作为索引。例如,要访问第四个列表元素,可使用索引3。具体实现如下:
bicyles = ['trek','cannondle','redline','specialized']
print(bicyles)
print(bicyles[1])
print(bicyles[3])
具体执行的效果如下:
从上图可知:我们返回的是第二个元素和第四个元素。Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让Python返回最后一个列表元素。
bicyles = ['trek','cannondle','redline','specialized']
print(bicyles[-1])
print(bicyles[1])
print(bicyles[3])
具体执行的效果如下:
这些代码返回specialized
。这种语法很有用,因为我们经常需要在不确定列表长度的情况下访问最后的元素。这种约定也适用于其他负数索引,例如:索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。
可像使用其他变量一样使用列表中的各个值。例如,我们可以使用拼接根据列表中的值来创建消息。具体实现如下:
bicyles = ['trek','cannondle','redline','specialized']
message = "My first bicyle was a " + bicyles[0].title() + "."
print(message)
具体执行的效果如下:
从上面的运行结果可以看出:我们利用bicycles[0]
的值生成了一个句子,并且存储在变量message
中,输出的是一个句子,这其中包含列表中的第一款自行车。
当我们在创建的大多数列表都将是动态的,这意味着列表创建后,将随着程序的运行增删元素。例如:当我们创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始的时候将一些外星人存储在列表中,然后每当有外星人射杀时,都将其从列表中删除,而每次有新的外星人出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,外星人列表的长度都不断变化。
修改列表元素的语法与访问元素语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定该元素的新值。例如,假设有以下的一个列表,其中的一个元素为honda
,如何修改它的值呢?
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
具体执行的效果如下:
在上述代码中首先定义了一个摩托的列表,其中的第一个元素为honda
,接下来,我们将第一个元素的值改为ducati
。输出表明,第一个元素的值确实变了,但其他列表元素的值没变。
我们在日常写代码中,很多情况下在列表中添加新的元素,例如,我们可能希望在游戏中出现新的外星人、添加可视化数据或给网站添加新注册的用户。Python提供了多种在既有列表中添加新数据的方式。
ducati
:motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
具体执行的效果如下:
通过运行上述的代码结果表示:我们通过方法append()
将元素ducati
添加到了列表末尾,而不影响列表中的其他所有元素。
方法append()
让动态地创建列表易如反掌,例如,我们先可以创建一个空列表,在使用一系列的append
语句添加元素。下面来创建一个空列表,再在其中添加元素honda
、yamaha
和suzuki
;具体实现如下:
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
具体执行的效果如下:
其实这种创建列表的方式极其常见,因为经常要等程序运行后,我们才明白用户要在程序中存储哪些数据。为控制用户,可以首先创建一个空列表,用于存储用户将要输入的值,然后将用户提供的每个新值附加到列表中。
insert()
可在列表的任何位置添加新元素。为此,你需要指定新元素的索引和值。motorcycles = ['honda','yamaha','suzuki']
motorcycles.insert(0,'ducati')
print(motorcycles)
具体执行的效果如下:
在这个示例中,值ducati
被值插入到了列表的开头;方法 insert()
在索引0处添加空间,并将值ducati
存储到这个地方。这种操作将列表中既有的每个元素都右移一个位置。
我们经常需要从列表中删除一个或多个元素。例如:玩家将空中的一个外星人射杀后,我们很可能要将其从存活的外星人列表中删除;当用户在我们创建的web应用中注销其账户时,我们需要将该用户从活跃用户列表中删除。我们可以根据位置或值来删除列表中的元素。
del
语句进行删除:motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
具体执行的效果如下:
我们通过del删除了列表motorcycles
中的第一个元素——‘honda’。我们可以使用del删除任何位置处的列表元素,条件是知道其索引,具体演示如下:
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)
具体执行的效果如下:
从上图中我们可以得知,已经第二款摩托车从列表中删除了。但是,需要注意的是:使用语句del将值从列表中删除后,你就无法访问了该元素了。
pop()
可以删除列表末尾的元素,并让你能够接着使用它。列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。我们还是以上面的例子进行演示:motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
具体执行的效果如下:
我们首先定义并打印了列表motorcycles
,接下来,我们从这个列表中弹出一个值,并将其存储到变量popped_motorcycle
。然后我们打印这个列表,以核实从其中删除了一个值。最后,我们打印弹出的值,以证明我们依然能够访问被删除的值。从上图中的运行结果可知:列表末尾的值suzuki
确实已被删除,它现在存储在变量popped_motorcycle
中。那么方法pop()
是怎么起作用的呢?假设列表中的摩托车是按购买时间存储的,就可以使用方法pop()打印一条信息,指出的是最后购买的是哪款摩托车:
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
last_owned = motorcycles.pop()
print("The last motrocycle I owned was a " + last_owned.title() + ".")
pop()
来删除列表中任何位置的元素,只需要括号中指定要删除的元素的索引即可。motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
first_owned = motorcycles.pop(0)
print("The first motrocycle I owned was a " + first_owned.title() + ".")
具体执行的效果如下:
首先我们弹出了列中的第一款摩托车,然后打印了一条有关这辆摩托车的消息。输出是一个简单的句子,描述了我购买的第一俩摩托车。不过我们需要注意的是:每当我们使用pop()
的时候,被弹出的元素就不再在列表中了。如果你不能确定该使用del语句还是pop()方法,下面是一个简单的判断标准:
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。
remove()
。假如我们要从列表motorcycles
中删除值suzuki
,具体实现如下:motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles.remove('suzuki')
print(motorcycles)
具体执行的效果如下:
我们从上面运行的结果可知顺利的将该元素删除。使用remove()
函数从列表中删除元素时,也可以直接使用它的值。下面删除值Suzuki
,并打印出了条信息,指出要将其从某列删除的原因:
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
too_expensive = 'suzuki'
motorcycles.remove(too_expensive)
print(motorcycles)
print("\nA " + too_expensive.title() + " is too expensive for me.")
具体执行的效果如下:
我们在列表中将删除的’suzuki’存储在变量too_expensive中。接下来,我们使用这个变量来告诉Python将哪个值从列表中删除,最后值’suzuki’已经从列表中删除,但它还存储在变量too_expensive中,让我们能够打印一条信息,指出将Suzuki
从列表motorcycles
中删除的原因。这里需要注意的是:方法remove()
只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
当我们在创建列表中,元素的排列顺序常常无法预测的,因为我们并非总能控制用户提供数据的顺序。这虽然在大多数的情况下都是不可避免的,但我们经常会需要以特定的顺序呈现信息。有时候,我们也希望列表元素最初的排列顺序,而有时候又需要调整排列顺序。Python提供了很多组织列表的方式,可根据具体情况选用。
Python方法中的sort()让你能够较为轻松地对列表进行排序。假设我们有一个汽车列表,并要让其中的汽车按字母进行排序。为简化这项任务,我们假设该列表中的所有值都是小写的。
cars = ['bmw','audi','toyota','subaru']
cars.sort()
print(cars)
具体执行的效果如下:
方法sort()
永久性地修改了列表元素的排序顺序。现在,汽车是按字母顺序排列的;当然,我还可以按与字母顺序相反的顺序排列列表元素,为此,只需向sort()
方法传递参数reverse='TRUE'
,具体实现如下:
cars = ['bmw','audi','toyota','subaru']
cars.sort(reverse=True)
print(cars)
具体执行的效果如下:
这也是对列表中的元素排列顺序的修改是永久性的。
要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数 sorted()
。函数sorted()
让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。具体如下:
cars = ['bmw','audi','toyota','subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("Here is the original list again:")
print(cars)
具体执行的效果如下:
我们首先按原始顺序打印列表,再按字母顺序显示该列表,以特定的顺序显示列表后,我们进行核实,确认列表元素的排列顺序以前相同。这里需要注意的是:调用函数sorted()
后,列表元素的排列顺序并没有变。如果我们要与字母顺序相反的顺序显示列表,也可以向函数sorted()
传递参数reverse = True
。另外,在并非所有的值都是小写时,按字母顺序排列列表要复杂些。决定排列顺序时,有多种解读大写字母的方式,要制定准确的排列顺序,可能比我们这里所做的要复杂。大多数都是来自于本文。
要反转列表元素的排列顺序,可使用方法reverse()
。假设汽车列表是按购买时间排列的,可轻松地按相反的顺序排列其中的汽车:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
具体执行的效果如下:
这里需要注意的是reverse()
不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序。但是,方法reverse()
永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse()
即可。
使用函数len()
可快速获悉列表的长度。在上面的示例中,列表包含了4个元素,因此其长度为4:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars))
具体执行的效果如下:
当我们遇到如下的场景的时候len()
很有用:
我们在刚开始使用列表时,经常会遇到一种错误。假设我们有一个包含三个元素的列表,却要求获取第四个元素时,就会报错,具体如下:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])
具体执行的效果如下:
这种错误在今后业火经常遇到,是一种很常见的错误。Python试图向你提供位于索引3处的元素,但它搜索列表motorcycles
时,却发现索引3处没有元素。鉴于列表索引差一的特征,这种错误很常见。有些人从1开始数,因此以为第三个元素的索引为3;但在Python中,第三个元素的索引为2,因为索引是从0开始。
索引错误意味着Python无法理解你指定的索引。程序发生索引错误时,请尝试将你指定的索引减1,然后再次运行程序,看看结果是否正确。
别忘了,每次需要访问最后一个列表元素时,都可以使用索引-1.这在任何情况下都行之有效,即便你最后一次访问列表后,其长度发生了变化:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])
具体执行的效果如下:
索引为-1总是返回最后一个列表元素,这里为值suzuki
;仅当列表为空时,这种访问最后一个元素的方式才会导致错误,具体实现如下:
motorcycles = []
print(motorcycles[-1])
具体执行的效果如下:
列表motorcycles
不包含任何元素,因此,Python返回一条索引错误的消息。因此,当我们发生索引错误却找不到解决办法的时候,请尝试将列表或其长度打印出来。列表可能与我们以为的截然不同,在程序对其进行了动态处理时尤其重要。通过查看列表或其包含的元素数,可帮助我们找出这种逻辑错误。
上篇文章给介绍了Python的变量以及简单数据类型。主要包括一个Python文件在Python解析器的运行过程,以及Python常用的数据类型;例如字符串、整型、浮点数以及注释。本文给大家介绍了列表的相关知识。包括列表的概念以及列表的增删改查,最后还介绍了列表的排序和应用列表应该注意事项。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!