列表简介
列表让我们能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含是上百万个元素。列表是新手可以直接使用的最强大的Python功能之一,它融合了众多重要的编程概念。
一、列表是什么
- 列表是由一系列按特定顺序排列的元素组成。
- 其中的元素之间没有任何关系
- 列表通常包含多个元素
- 在Python中我们用([ ])来表示列表,并用逗号来分割其中的元素。
我们演示一个简单的列表,这个列表包含几种自行车:
bicycles = ["trek","cannondale","redline","specialized"]
print(bicycles)
运行结果如下:
['trek', 'cannondale', 'redline', 'specialized']
但是这不是我们想让用户看到的结果,接下来我们学习如何访问列表元素。
1.1访问列表元素
列表是有序集合,所以我们可以在访问列表时指出列表的名称,在指出元素的索引,并将其放在[ ]中。
例如,下面的代码从bicycles 中提取出第一款自行车:
bicycles = ["trek","cannondale","redline","specialized"]
print(bicycles[0].title())
运行结果如下:
Trek
这正是我们让用户看到的结果——整洁、干净的输出。
1.2索引从0而不是1开始
在Python中,第一个列表元素的索引为0,而不是1。这与列表操作的底层实现相关。
下面代码访问1和3处的自行车:
bicycles = ["trek","cannondale","redline","specialized"]
print(bicycles[1].title())
print(bicycles[3].title())
运行结果如下:
Cannondale
Specialized
Python为了访问列表最后一个元素提供了一种特殊语法。通过将索引指定为-1,可以让Python返回最后一个列表:
bicycles = ["trek","cannondale","redline","specialized"]
print(bicycles[-1].title())
print(bicycles[-2].title())
运行结果如下:
Specialized
Redline
这里我们可以看到代码输出的是列表中倒数第一、倒数第二个元素。这种语法很有用,因为我们经常需要在不知道列表长度的情况下访问最后的元素。
1.3使用列表中的各个值
可像使用其他变量一样使用列表中的各个值。
下面我们尝试从列表中提取第一款自行车,并使用这个值来创建一条消息:
bicycles = ["trek","cannondale","redline","specialized"]
message = "My first bicycle was a " + bicycles[0].title() + "."
print(message)
运行结果如下:
My first bicycle was a Trek.
二、修改、添加和删除元素
我们创建的列表大多数是动态的,这意味着列表创建后,将随着程序的运行增删元素。
2.1修改列表元素
修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指定列表名和要修改的元素的索引,在指定该元素的新值。
代码实现:
motorcycles = ["honda","yamaha","suzuki"]
print(motorcycles)
motorcycles[0] = "ducati"
print(motorcycles)
运行结果如下:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
我们可以根据索引的不同,任意修改列表中的元素。
2.2在列表中添加元素
- 在列表末尾添加元素
在列表末尾添加元素时,最简单的方式是将元素附加到列表末尾。
代码实现:
motorcycles = ["honda","yamaha","suzuki"]
print(motorcycles)
motorcycles.append ("ducati")
print(motorcycles)
运行结果如下:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
这里我们使用了方法append()将元素"ducati"添加到了列表末尾,而不影响列表中的其它元素。
方法append()让动态的创建列表易如反掌,我们先创建一个空列表,演示代码如下:
motorcycles = []
motorcycles.append ("honda")
motorcycles.append ("yamaha")
motorcycles.append ("suzuki")
print(motorcycles)
运行结果如下:
['honda', 'yamaha', 'suzuki']
- 在列表中插入元素
使用方法insert()可在列表的任何位置添加新元素。
代码实现如下:
motorcycles = ["honda","yamaha","suzuki"]
motorcycles.insert(0,"ducati")
print(motorcycles)
远行结果如下:
['ducati', 'honda', 'yamaha', 'suzuki']
这种操作将列表中既有的每个元素都右移一个位置。
2.3从列表中删除元素
- 使用del语句删除元素
motorcycles = ["honda","yamaha","suzuki"]
del motorcycles[0]
print(motorcycles)
运行结果如下:
['yamaha', 'suzuki']
我们可以根据列表元素的索引,任意删除列表中的元素。
- 使用**方法pop()**删除元素
方法pop()可删除列表末尾的元素,并让你能够接着使用它。术语弹出pop()源自类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
代码实现如下:
motorcycles = ["honda","yamaha","suzuki"]
print(motorcycles)
poped_motorcycles = motorcycles.pop(2)
print(motorcycles)
print(poped_motorcycles)
运行结果如下:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
我们可以根据元素索引可以弹出列表中任意元素,如果pop()括号内不填内容,Python默认弹出列表中最后一个元素。
**注意:**我们使用pop ()时,被弹出的元素就不在列表中了。
如果我们从列表中删除一个元素,且不在以任何方式使用它,就使用del语句;如果我么要在删除元素后还能继续使用它,就是使用方法pop().
- 根据值删除元素
我们如果知道元素的值,便不需要元素的在列表中的位置,可以根据元素的值直接删除该元素。这里我们使用方法remove()。
演示代码如下:
motorcycles = ["honda","yamaha","suzuki"]
motorcycles.remove("honda")
print(motorcycles)
运行结果如下:
['yamaha', 'suzuki']
使用remove()从列表中删除元素时,也可以接着使用它的值。下面删除’‘suzuki’’,并打印一条消息,指出要将其从列表中删除的原因:
motorcycles = ["honda","yamaha","suzuki"]
print(motorcycles)
too_expensive = "honda"
motorcycles.remove("honda")
print(motorcycles)
word = "is too expensive for me "
add ="\nA " + "honda" + too_expensive + word
print(add.title())
运行结果如下:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
A Hondahondais Too Expensive For Me
注意:方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。以后我们将学习如何这样做。
** 三、组织列表**
为了有效的管理列表,Python为我们提供了很多组织列表的方式,我们可以根据具体情况分析。
3.1使用方法sort()对列表进行永久性排序
代码实现:
name = ["jiangnan","weipeng","chenchen","suqin"]
name.sort()
print(name)
运行结果如下:
['chenchen', 'jiangnan', 'suqin', 'weipeng']
我们可以看到name这个列表的元素按照字母的顺序重新排列,且永久性的修改了列表元素的排列顺序。
我们也可以按照与字母顺序相反的顺序排列列表元素,这里我们只需要向sort()方法传递参数reverse=True。
代码实现:
name = ["jiangnan","weipeng","chenchen","suqin"]
name.sort(reverse = True)
print(name)
运行结果如下:
['weipeng', 'suqin', 'jiangnan', 'chenchen']
注意传递参数中是True而不是Ture,这里的排序也是永久性的修改。
3.2使用函数sorted()对列表进行临时排序
顾名思义,方法sorted()可以让我们对列表进行排序的同时不会影响元素在列表中的排列顺序。
代码实现:
name = ['jiangnan', 'weipeng', 'chenchen', 'suqin']
print(name)
print(sorted(name))
运行结果如下:
['jiangnan', 'weipeng', 'chenchen', 'suqin']
['chenchen', 'jiangnan', 'suqin', 'weipeng']
**注意:**在并非所有值都是小写时,按字母的顺序排列列表要复杂些。决定排列顺序时,有多种解读大写字母的方式,要指定准确的排列顺序,可能比我们这里所做的要复杂。然而大多数排序方式都基于我们这里学习的方法。
3.3倒着打印列表
我们要反转列表元素的排列顺序,可使用方法reverse()。
代码实现:
name = ['jiangnan', 'weipeng', 'chenchen', 'suqin']
name.reverse()
print(name)
运行结果如下:
['suqin', 'chenchen', 'weipeng', 'jiangnan']
这里的修改也为永久性修改,但可以随时恢复到原来的顺序,我们只要再次调用方法reverse()即可。
3.4确定列表的长度
使用函数**len()**可以快速获取列表的长度。
代码实现如下:
name = ['jiangnan', 'weipeng', 'chenchen', 'suqin']
print(len(name))
运行结果如下:
4
注意: Python计算列表元素数时从1开始,因此确定列表长度时,我们不用考虑差1差错。
四、使用列表时避免索引错误
常见性索引错误在这里便不一一赘述。
这里我们演示当列表为空时的索引错误:
name = []
print(name[-1])
运行结果如下:
Traceback (most recent call last):
File "D:/bw_tools/code/day01/demo08.py", line 2, in <module>
print(name[-1])
IndexError: list index out of range
索引[-1]总是返回到列表的最后一个元素,因为列表中不含有任何元素,所以Python返回一条索引错误信息。
**注意:**发生索引错误却找不到解决办法时,请尝试将列表或其长度打印出来。通过查看列表或其包含的元素数,这样有助于我们找出这种逻辑错误。
本章小结
- 列表是什么
- 列表元素的使用
- 定义列表
- 增删列表元素
- 列表的永久性排序和临时排序
- 确定列表长度,避免索引错误
下一章将学习如何以高效的方式处理列表元素。通过使用为数不多的几行代码来遍历列表元素,我们就能高效的处理它们,即使列表包含数千乃至数百万个元素。