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