跳转至

Day19

本文总阅读量次 ,原创教程,严禁转载

Day19 使用列表

现在我们已经学习了什么是列表和如何使用循环,我们今天将学习如何使用列表。在Python中,列表对于任何程序都非常重要,所以,我们需要理解我们什么时候使用它们。

为了完成本课程,让我们继续从上一个笔记本文件“ Week_04”开始,并在下面添加一个标记为“ 使用列表”的Markdown模块。

检查长度

通常我们将需要知道一个列表中包含多少个对象。为了实现这个目标,我们使用len()函数:

# 检查列表中对象的数量
nums = [5, 10, 15]
length = len(nums)   # len()返加一个整数
print(length)

继续并运行这一代码块。 这个代码块将输出整数3。我们后面将多次使用length函数,无论是检查一个空列表还是在range函数中使用它来角确定一个循环的次数。

列表切片

回顾前几周,我们讨论了一个字符的切片。列表切片也是同样的方式,以便于我们能够获得特定的对象。切片和range()函数具有一样的参数,如开始、结束、步长:

# 用切片获取一个列表中的特定对象
print(nums[1:3])  # 输出结果为索引位置1和2上的对象
print(nums[:2])  # 输出结果为索引位置0和1上的对象
print(nums[::2])  # 输出结果为索引位置0,2和4上的对象,即索引从数字0开始,每次递增2
print(nums[-2:])  # 输出结果为列表中最后两个的对象

继续并运行这一代码块。 输出结果显示在每个语句后边的注释中。我们使用方括号表示法,正如我们访问索引一样,只是我们通过冒号分开其他值,而顺序刚保持为[开始:停止:步长]。方括号表示法默认从0开始,步长为1。如果你想使用默认值,可以选择不使用这些值。对于步长为正而开始值为负将会使切片从后向前获取数据。如果从开始位置或停止的位置使用负数,则切片将从后面开始或停止。这意味着,如果你将停止位置上为-5,切片获取的对象将从列表的开头一直切到列表结束之前的五个元素。

增加元素

当你需要向你的现有列表中添元素,Python有两个不同的方法来实现这一目标。

.append()

Append方法总是将值添加到列表内元素的后面。让我们来看一下:

# 使用append方法将增加一个元素到列表内元素的后面
nums = [10, 20]
print(nums)  # 输出[10, 20]
nums.append(5)
print(nums)  # 输出[10, 20, 5]

继续并运行这一代码块。 我们创建了一个包含两个元素的列表,然后将数值5添加到列表的后面。

.insert()

增加一个元素到列表中的第二个方法是使用insert函数。这一方法需要一个索引值才能将增加的值插入到指定位置。让我们来看一个例子:

# 在列表最开始的位置增加一个数值
words = ['ball', 'base']
print(words) # 输出结果为['ball', 'base']
words.insert(0, 'golve') # 第一个参数是索引,第二个是数值
print(words) # 输出结果为['golve', 'ball', 'base']

继续并运行这一代码块。 输出结果为['glove','ball','base']。 glove现在在零索引位置上,因为我们在insert方法中指定了在该索引位置上插入数值。

移除元素

从一个列表中移除元素有多种方式,接下来我主要介绍其中的两种方法。

.pop()

默认情况下,pop方法会移除列表中最后一个元素,当然,你也可以指定索引去移除元素。这种方法也被广泛的用来存储被移除的元素。当使用pop方法时,它不仅称除了相应的元素,而且还会返回这个元素。这就可以让我们使用一个变量来存储从列表中移除的那个元素,以便之后使用:

# 使用pop方法移除元素并将其存储到一个变量中以便之后使用
items = [5, 'ball', True]
items.pop()                    # 默认移除列表中最后一个元素
removed_item = items.pop(0)    # 移除元素5并存储进removed_item变量中
print(removed_item, '\n', items)

继续并运行这一代码块。 使用pop方法,我们可以看到它首先移除了列表中最后一个元素True,那么,接着移除了索引位置0上的元素5。当整数5移除列表时,我们同时将其保存到一个新变量中,然后将其与新列表一起输出。

.remove()

remove方法允许我们基于给定的元素来从列表中移除相应的元素:

# 用一个try和except来使用remove方法
sports = ['bseball', 'soccer', 'football', 'hockey']
try:
    sports.remove('soccer')
except:
    print('That item does not exist in the list')
print(sports)

继续并运行这一代码块。 在这里,我们将看到结果输出的是没有元素soccer的列表,这是因为元素soccer刚刚已经被我们删除了。 另外要说明的一点是,我们之所以尝试使用try和except结构语句,是因为如果列表中不存在元素“soccer”,则可以防止该程序崩溃。

使用数值列表数据

对于我们使用的数值型数据,Python为我们提供了一些函数来了解数值型数据的特征,如min(求最小值)、 max(求最大值)和sum(求和)。尽管这些是最常用的一些函数,但是我们仍然有更多的函数可使用:

# 使用min,max和sum
nums = [5, 3, 9]
print(min(nums))   # 输出列表中最小值
print(max(nums))   # 输出列表中最大值
print(sum(nums))   # 输出列表中所有数值的和

继续并运行这一代码块。 输出结果将为3、9和17。正如其名称所述,他们将找到列表中的最小值和最大值。sum函数则将简单地将列表中所有数字加总求和。

列表排序

在实际应用中,你经常会使用一个有序的列表。在Python中有两种方法可以实现这一目标,但这两种方法又存在一定差异。一个会直接覆盖原始列表,另一个则会返回一个新创建的列表。

sorted()

sorted函数无论对数值型列表还是字符型列表都是有效的,但对于二者混合的列表则是无效的。sorted函数结果会返回一个列表的副本,所以它不会改变原始列表。通常来说,如果你需要保留原始且完整的列表,则使用这一函数:

# 对于数值型列表和字符型列表使用sorted方法排序
nums = [5, 8, 0, 2]
sorted_nums = sorted(nums)   # 使用sorted方法排序后存储在一个新变量中
print(nums, sorted_nums)     # 输出原始的列表和排序后的列表

继续并运行这一代码块。 你会注意到,在声明nums列表时,其输出结果仍是保持原始顺序的列表。 要获取新的排序后列表,我们只需将其保存到一个新变量中即可。

.sort()

sort方法的使用目的与我们上面所讲的sorted函数目的相同; 但是,不同的是它会直接更改并覆盖原始列表:

# 使用.sort()函数对列表进行排序
nums = [5, 0, 8, 3]
nums.sort()           # 真接更改并覆盖原始列表
print(nums)

继续并运行这一代码块。 结果输出将是一个正确排序后的列表。只需记住,nums变量现在已更改,因为.sort()函数直接更改了变量的值。

条件和列表

在实际使用列表时,我们通常需要检查列表中的某一元素量否存在。现在我将介绍如何在一个列表中运行条件语句。将列表和条件语句相结合的原因有很多。 以下几个例子只是其中的几种原因。

使用“in”和“not in”关键词

上周介绍条件语句时,我们已经看到了这些关键字的使用。 使用列表时,它们的目的是在列表中快速查找对应的值:

# 在一个列表中使用条件语句
names = ['Jack', 'Robert', 'Mary']
if 'Mary' in names:
    print('found')         # 当Mary在列表中将会运行这一代码
if 'Jimmy' not in names:
    print('not found')     # 当Jimmy不在列表中将会运行这一代码

继续并运行这一代码块。 输出结果为“found”和“not found”。 在第一个语句中,我们试图查看列表中是否存在“Mary”,结果确实存在。 第二个条件语句检查“ Jimmy”是否不存于列表中,这也是正确的,因此它也可以运行。

检查一个空列表

对于空列表的检查有很多原因,提及最多的就是确保在你的程序中不会引发任何错误,接下来,让我们来看如何对空列表进行检查:

# 使用条件语名来查看列表是否为空
nums = []
if not nums:        # 等价于语法:if nums = []
    print('empty')

继续并运行这一代码块。 这将会输出“empty”。 它在注释我们已经提到,但我们也可以检查一下是否等于空括号。 在这里,我想向你展示如何使用“ not”关键字。为了检查列表的元素,你将写下这样代码:

if nums

循环和列表

你能使用for循环和while循环去迭代列表中的元素。

使用for循环

当使用for循环迭代列表中的元素时,语法上看起来像之前我们使用的range()函数。然而,这次我们使用一个暂时变量,关键词in和列表名称。对于每一次迭代,这个临时变量都会被分配一个新的元素的值。让我们来试试看。

# 使用for循环列印列表中的所有元素
sports = ['Baseball', 'Hockey', 'Football', 'Basketball']
for sport in sports:
    print(sport)

继续并运行这一代码块。 在这里,我们可以看到这一代码块将输出列表中的每个元素。 在第一次迭代期间,临时变量“ sport”被分配为“ Baseball”,一旦将其打印出来,它将移至下一个列表中的元素。

使用while循环

while循环通常用于条件循环。while循环一个比较典型的用法就是移除列表中的元素。while循环还有很多用法,这仅仅是众多用法中的一种:

# 使用while循环移除一个特定值
names = ['Bob', 'Jack', 'Rob', 'Bob', 'Robert']
while 'Bob' in names:
    names.remove('Bob')   # 移除列表中的所有的Bob字符
print(names)

继续并运行这一代码块。 变量names输出结果将是没有字符“ Bob”的列表。 我们将while循环与条件语句结合使用,当检查到列表中的“ Bob”值后,然后删除它,直到条件不再成立为止。

练习

1.移除重复值:从下面的列表中移除全部重复值,输出结果应是[‘Bob’, ‘Kenny’, ‘Amanda’] $$ names = ['Bob', 'Kenny', 'Amanda', 'Bob', 'Kenny'] $$


小提示:使用.count()方法并结合while循环。


2.用户输入:使用一个while循环来持持续要求用户输入一个词语,直到用户输入“quit”。一旦用户输入一个词,就将这个词添加到列表中。一旦他们中止循环,则用for循环输出列表中的所有元素。


今天讲解的知识点很重要,通过上述讲解的内容我们才能了解如何使用列表,是否它可以是条件语句或循环。 列表可以结合很多方法使用; 在本书的其余部分中,我们将更详细的介绍它们。


上一篇:Day18
下一篇:Day20