专栏首页算法channel第四章4:使用列表

第四章4:使用列表

第四章4:使用列表

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

检查长度

通常我们将需要知道一个列表中包含多少个对象。为了实现这个目标,我们使用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循环输出列表中的所有元素。


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

本文分享自微信公众号 - Python与机器学习算法频道(alg-channel),作者:zhenguo

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第四章1:列表

    这一周,我将介绍一种称为“列表”的新数据类型和一种称为“循环”的新概念。列表将让我们有能力存储大规模的数据,而循环将可以让我们有能力反复执行特定部分的代码。

    double
  • 第4章 表达式

    用户1653704
  • 《C++Primer》第四章 表达式

    身为C++的零基础初学者,短期内把《C++Primer》啃下来是一个比较笨但是有效的方法,一方面可以掌握比较规范的C++语法(避免被项目中乱七八糟的风格带跑偏)...

    TOMOCAT
  • 第三章--第三节:列表

    喵叔
  • 第四章:使用QueryDSL与SpringDataJPA实现多表关联查询

    恒宇少年
  • 4. [mmc subsystem] mmc core(第四章)——host模块说明

    底层host controller驱动调用,用来分配或者释放一个struct mmc_host结构体,将其于mmc_host_class关联,并且做部分初始化操...

    233333
  • Java EE实用教程笔记----(4)第四章 第4章 Struts 2类型转换及输入校验

    今天开第四章啦,预计本系列教程(Java Web框架)将于12月前完成哈,共勉,加油↖(^ω^)↗!

    浩Coding
  • 《大话数据结构》总结第一章 绪论第二章 算法第三章 线性表第四章 栈和队列第五章 字符串第六章 树第七章 图第八章 查找第九章 排序

    第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章 算法 算法的特性:有穷性、确定性、可行性、输...

    SeanCheney
  • python列表和元组(第二章)

    python包涵6中内建的序列(列表,元组,字符串,Unicode字符串,buffer对象和xrange对象),本章讲常用的2中类型:列表和元组。

    py3study

扫码关注云+社区

领取腾讯云代金券