Python基础教程——列表元组

欢迎来到今天的 Python 课堂。

为了深化对所学知识的理解,在开始本节之前,我们先来对上一节进行简单的知识回顾。

接着是今天学习可能会用到的知识,咱们先来几道题目热热身。

本地完成下面代码,让输出结果为:同学们,开始学Python了!

class_time = int(input('现在时间多少点啦:'))
# 使用条件判断语句中的 if,使当变量 class_time 等于 8 时,能打印出'同学们开始学Python了!。

来看看我的答案。

class_time = int(input('现在时间多少点啦:'))
# 使用条件判断语句中的 if,使当变量 class_time 等于 8 时,能打印出'同学们开始学Python了!'。
if class_time == 8:

print('同学们,开始学Python了!')

在进入正题之前,我们先着重了解今天学习内容的重难点。

总体而言,今天需要学习的内容相当丰富。

你将会学习到非常相似的两种数据类型,它们分别是列表和元组,然后你需要总结和归纳它们的特点。

列表的应用非常重要,你必须认真学习,不可掉以轻心。

Python中的列表是一种有序的、可以被修改的数据类型。即使我们已经有了关于列表的一些基础知识,仍需要进行系统化的学习。

提取列表元素、增加和修改列表中的元素等操作是编程中非常重要的技能。

1.列表

1.1 列表的元素

首先,我们来聊聊列表的元素。虽然你已经有所了解,但还是看看下面这张图复习一下。

在编程里,列表中的数据被称为列表的元素。

例:

skills = ['英语六级', '吉他']

以上面例子来看,列表 skills 中有两个元素,分别是 ‘英语六级’ 和 ‘吉他’,且这两个元素都是字符串。

不过,列表是一个包容的数据类型。其中的元素可以为任意数据类型,包括整数、浮点数、字符串,列表,以及后续我们会学到的元组,字典等。

举个例子,我们以bag来代表你的书包,pen_bag 来代表书包内的笔袋。

# 创建列表 pen_bag
pen_bag = ['笔', '尺子', '涂改液']

# 创建列表 bag,其中列表 pen_bag 作为列表 bag 的一个元素
bag = ['电脑', '雨伞', pen_bag]

在这串代码里面,我创建了两个列表,分别为:bag 和 pen_bag。

其中在列表 bag 里面,一共有三个元素,包括两个字符串:‘电脑’,‘雨伞’;以及一个我们创建的列表 pen_bag。

其中在列表 bag 里面,一共有三个元素,包括两个字符串:‘电脑’,‘雨伞’;以及一个我们创建的列表 pen_bag。

我们打印一下列表 bag 看看。阅读完代码,本地运行即可。

# 创建列表 pen_bag
pen_bag = ['笔', '尺子', '涂改液']

# 创建列表 bag,其中列表 pen_bag 作为列表 bag 的一个元素
bag = ['电脑', '雨伞', pen_bag]

# 打印列表 bag,看下 bag 的内容
print(bag)

此时你可以看到终端显示为:[‘电脑’, ‘雨伞’, [‘笔’, ‘尺子’, ‘涂改液’]] 这个结果。

也就是说,列表中的列表,同样是一个元素。

就像你的书包可以放电脑,还能再放一个小包装笔尺一样。

你还记得吗?任何数据类型都可以作为列表的元素。它不仅仅限于像上面这个例子那样的列表,而且还包括我们后面会学到的字典和元组。

不管是哪种数据类型,我们都可以把它视为一个元素。

请再执行下方代码一遍。只要读完代码,就可以在本地运行了。

# 创建列表 pen_bag
pen_bag = ['笔', '尺子', '涂改液']

# 创建列表 bag,其中列表 pen_bag 作为列表 bag 的一个元素
bag = ['电脑', '雨伞', pen_bag]

# 打印列表 bag,看下 bag 的内容
print(bag)
# 把 pen_bag 直接表示成 ['笔', '尺子', '涂改液'] 打印。
bag = ['电脑', '雨伞', ['笔', '尺子', '涂改液']]

print(bag)

可以看到,打印出来的两个结果是两个一样的列表。这是因为创建列表时,直接将数据写在里面,和使用变量来代替的效果是一样的。

再给你举个简单的例子,你在 office 系列的办公软件中会 word 和 ppt。

看看下面这串代码,阅读完代码,本地运行即可。

# 创建列表 office
office = ['word', 'ppt']

# 创建列表 skills,并嵌套入 office
skills = ['英语六级', '吉他', office]

# 打印 skills 列表``print(skills)

这里也是同样的道理,列表 skills 内也可以有同样是列表的 office。

1.2 索引取值

列表中的每个元素都有其对应位置的数字编号,即索引。

只要在列表后面加一个中括号 [],里面再填上数字,就可以取到对应的内容。

阅读完下面代码,本地运行即可。

# 创建列表 skills
skills = ['英语六级', '吉他']

# 索引取 skills 中的'吉他'元素。
print('我最擅长的技能是' + skills[1])

可能你会问,为什么 ‘吉他’ 的索引不是 2,而是 1 呢?

和我们日常生活中不同,Python 里从 0 开始计数,所以 ‘吉他’ 的索引是 1,'英文六级’的索引是 0。

例如:list[n] 它表示的是:从左往右数,第 n+1 个元素。

除此之外,Python 还支持用负数做索引,比如 list[-n] 它表示的是:从右往左数,第 n 个元素。

所以如果你想提取列表 skills 中的 ‘吉他’,你还可以写成:skills[-1]。

用负数做索引这种用法会使用在你不知道列表有多长,但你就是想拿到最后倒数第 n 个元素的时候。

来,只说不练假把戏,请你来写个代码吧。

练习:

# 用索引取值的方法,提取 office 列表中的元素 'word',打印出 'office里面,我会使用word'。
office = ['excel', 'ppt', 'word']``   

答案:

# 用索引取值的方法,提取 office 列表中的元素 'word',打印出 'office里面,我会使用word'。
office = ['excel', 'ppt', 'word']
print('office里面,我会使用' + office[2])

第一步我们先要从书包 bag 把小包 pen_bag 拿出来。阅读完代码,本地运行即可。

# 创建一个 pen_bag 列表,代表笔袋
pen_bag = ['笔', '尺子', '涂改液']
# 创建一个 bag 列表,代表书包,并把笔袋 pen_bag 列表作为其中的元素。
bag = ['电脑', '雨伞', pen_bag]

# 打印 bag 中索引为 2 的元素,即列表 pen_bag。
print(bag[2])
# 打印列表 pen_bag 作对比,看看是否一致。
print(pen_bag)

第二步我们需要把小包 bag 中的’笔’拿出来。同样阅读完代码,本地运行即可。

# 创建一个 pen_bag 列表,代表笔袋
pen_bag = ['笔', '尺子', '涂改液']
# 创建一个 bag 列表,代表书包,并把笔袋 pen_bag 列表作为其中的元素。
bag = ['电脑', '雨伞', pen_bag]

# 在取得 pen_bag 以后,打印 pen_bag 中索引为0的元素。
# 其中 bag[2] 即为 pen_bag
print(bag[2][0])
# 打印 pen_bag 中索引为 0 的元素.
print(pen_bag[0])

这个过程,很像剥洋葱,一层一层地去把列表打开,拿到我们想要的东西。

总结一下,当需要两次索引的时候,在 Python 上的格式为:list[索引][索引]。

来,咱们试着写个代码。

练习

下面这个列表都是我喜欢吃的食物。为了减肥,我把甜品和其他食物分为两个列表做了区分。

下面的食物里面,唯有“四川凉面”能称得上心头好。帮我把它提取出来好嘛?

# 提取元素并打印出'我最爱的心头好是四川凉面'。
foods = [['薄荷冰粉', '龟苓膏', '草莓圣代'], ['虾饺', '四川凉面']]

答案:

# 提取元素并打印出'我最爱的心头好是四川凉面'。
foods = [['薄荷冰粉', '龟苓膏', '草莓圣代'], ['虾饺', '四川凉面']]
print('我最爱的心头好是' + foods[1][1])

1.3 列表的切片

刚才我们做的,还都是取一个元素,但当我们需要取多个元素呢?

举个例子:如果知枫想要同时拿出小包 pen_bag = [‘笔’, ‘尺子’, ‘涂改液’] 里面的’笔’和’尺子’怎么办?

此时,我们会用到一种新的技巧:切片 。

切片即在列表中切取一段数据,生成一个新的列表。

咱们先来看一段代码,阅读后本地运行即可。

# 创建列表 bag
bag = ['笔', '尺子', '涂改液']
# 在列表 bag 内切片``print(bag[0:2])

在切片时,索引 [a:b] 的切取范围是:a <= X < b,左边有等于号,而右边是没有等于号的。

对照着看上面的图片,我给列表中的每个元素前面都加上它的索引。其实切片,就是取出两个索引中间夹着的元素。

如果你擅长用口诀记忆的话,那么有句口诀是:“列表切片怎么用,记好取左不取右”。

另外要注意,这里的符号用的都是英文。而冒号左右的值可以不填,不填的时候则代表一取到底。(冒号左边不填相当于等于填了 0,右边不填相当于取到底)

来做个小练习,补全下面代码的****注释,然后运行代码,看看得到什么的结果是否与注释一致。

# 补充第八行的注释,再点击运行验证结果即可。
foods = ['虾饺', '龟苓膏', '薄荷冰粉', '四川凉面', '草莓圣代']

# 示例:下一行代码会打印出:['虾饺']。
print(foods[:1])

# 下一行代码会打印出:
print(foods[1:3])

答案:

# 补充第八行的注释,猜猜看会打印出什么列表。
foods = ['虾饺', '龟苓膏', '薄荷冰粉', '四川凉面', '草莓圣代']

# 示例:打印 ['虾饺'],这是由一个元素组成的列表
print(foods[:1])

# 下一行代码会打印出:['龟苓膏','薄荷冰粉']
print(foods[1:3])

1.4 添加列表的元素

咱们先来看一段代码。阅读后,本地运行。

# 创建列表 skills
skills = ['英语六级', '吉他']

# 用 append() 给列表 skills 添加元素 'Python'
skills.append('Python')

# 打印 skills 列表,验证结果
print(skills)

怎样?是不是成功地把 Python 添加到了 skills 列表的最后面。append 在英文中是添加的意思。

用法格式是:列表名.append(元素)。

通过 append() 添加元素,元素会被添加到列表的最后一个位置。

试试看,给下面的 foods 列表,后面再添加上超出名的小吃——“猪脚姜”,并且打印出来。

# 用 append() 给列表 foods 添加元素'猪脚姜'
foods = ['虾饺', '龟苓膏', '薄荷冰粉', '四川凉面', '草莓圣代'] 

答案:

# 用 append() 给列表 foods 添加元素'猪脚姜'
foods = ['虾饺', '龟苓膏', '薄荷冰粉', '四川凉面', '草莓圣代']

foods.append('猪脚姜')

# 打印列表
print(foods)

怎么样?做对了嘛?对比答案看看。

现在我们已经学会了如何给列表添加元素了,那我再考考你。

你有没有想过,如果我们想要修改列表里面的元素,应该如何操作呢?

1.5 列表的修改

我们修改列表内的元素时,直接重新赋值就好了。

赋值的方法是:列表名[索引] = 新内容,来看个代码:

# 创建列表 skills
skills = ['英语六级', '吉他', 'python']

# 中括号里填索引,Python 的索引是 2。然后重新把 'Python' 赋值过去就对了!
skills[2] = 'Python'

# 打印 skills 列表,验证一下结果吧。
print(skills)

补充代码,将下面 foods 列表里的 ‘草莓圣代’ 修改成 ‘芒果绵绵冰’,然后打印出来。

foods = ['虾饺', '龟苓膏', '薄荷冰粉', '四川凉面', '草莓圣代']
# '草莓圣代'索引为 4,通过 列表名[索引] = 新内容的格式重新赋值。
foods[4]= '芒果绵绵冰'
print(foods)

我们来看下面这张图复习一下。

咱就继续吧。

2.元组

元组(tuple),是一种类似列表的数据类型。与列表在形式上有一个区别:列表用中括号[],而元组是用小括号()。

来看看下面这个案例。

office = ('word', 'ppt', 'excel')

而在用法上,它和列表都有着非常高度的一致性。比如:都可以存储大量数据,都可以用同样的方式取值,都可以用同样的方式切片等。

我们来看一组示例:

office = ('word', 'ppt', 'excel')
skills = ('英语六级', '吉他', office)

# 取值
print(skills[0])
# 切片
print(skills[1:2])

你可能会有疑问,这样岂不是元组和列表一模一样了,但它们还是有很多不同的。

元组和列表最大的不同之处在于:元组,一经创建则不可修改。

所以我们之前学习的列表的增加、修改这些动作,对于元组是不适用的。

来看个代码示例:

office = ('word', 'ppt', 'excel')

# 1)不能为元组增加元素
# 会报错:'tuple' object has no attribute 'append' 元组没有append功能
office.append('outlook')

# 2)不能对元组元素进行修改
# 会报错:'tuple' object does not support item assignment 元组不支持元素赋值
office[0] = 'outlook'

另外需要注意,如果元组里只有一个元素,后面也要加逗号,如 foods = (‘龟苓膏’,), 如果不加逗号的话,那它就不会被判定成元组。

事实上,在 Python 里面,我们已经对这两种数据类型做了区分:可变数据类型与不可变数据类型。

像列表这样,我们可以直接对它进行修改的数据类型我们称之为可变数据类型。

而像元组这样一经创建以后就不可修改的,我们称之为不可变数据类型。

3.序列

3.1 序列的概念

不知道你有没有发现,我们刚刚学习的列表和元组都是由按顺序排列的数据组成的。

其实在 Python 中,我们把像列表和元组这样的数据类型,都叫做序列,指的就是一组多个数据按顺序排成一列。

序列内有一个个元素,每个元素都有对应的索引,用于标记元素的位置。

还有一类序列,我们其实之前有见过,那就是!

字!符!串!

你有任何想法吗?字符串是由若干个字符按照一定的次序排列组合形成的数据结构。

每一对引号内的字符都按照特定的顺序排列,并且每个字符都有相应的索引。

因此,字符串被称为符合序列定义的完美表示。

它们具有元素和对应的索引,能够进行索引、切片等操作。作为序列,这些特点都是共同点。

请你本地运行下面的代码看看。

# 注意观察比对终端的内容。
list_number = [1, 2, 3]
tuple_number = (1, 2, 3)
str_number = '123'

# 索引取值
print(list_number[1])
print(tuple_number[1])
print(str_number[1])

# 切片
print(list_number[1:2])
print(tuple_number[1:2])
print(str_number[1:2])

是不是内部的元素都能按索引取值、切片的规则给取出来打印呢?

没错的,因为作为序列来说,所有的这些功能其实都是通用的。

3.2 成员运算符

我们都知道,如果对学到的知识不加以复习的话,能力是会流失的。所以,不时地自我检查自己是否具备某种能力是非常必要的,我们只有对自己的能力有一个清晰地判断,才能更好地巩固复习。

类比到序列来说,也是可以进行某个元素是否在序列内的判断的。

以 skills = [‘英语六级’, ‘吉他’] 举个例子。

假如我们想要判断一项能力(元素)是否还在我掌握的技能(skills 列表)里,该怎么做呢?

Python 里有成员运算符 in,可以判断一个元素是否在某一个序列中。

还记得条件判断吗?如果条件为真,就执行一些代码。如果条件为假,就执行另外一些代码。

结合 if 来判断某个元素是否在序列内时,常见写法是:if 元素 in 序列,可以理解为如果某个元素在列表内,就执行一些代码。

咱们先来看下面这个代码。阅读后,本地运行。

skills = ['英语六级', '吉他']

# 吉他在技能列表里吗
if '吉他' in skills:

print('我会吉他。')

# 英语六级在技能列表里吗
if '英语六级' in skills:

print('我英语水平有六级。')

# Python在技能列表里吗
if 'Python' in skills:
print('我还学会了Python。')

看,如果元素是在对应的列表里面,就会执行 print() 这行代码;如果元素不在列表里面,则不会执行打印语句。

拓展一个知识点,如果想要判断一个元素是否不存在列表呢,可以用:if 元素 not in 序列 来判断。

理解起来也很简单,not 在英文中就是不的意思,整个写法用英文来理解就是“如果元素不在列表里面的话”。

请动手本地运行下面代码看看。

skills = ['英语六级']

# 吉他在技能列表里吗
if '吉他' not in skills:

print('我不会吉他。')

理解了吗?理解了的话,就试试完成一道练习题!

练习

# 判断 Python 在技能元组 skills 里吗?
skills = ('英文六级', '吉他')
# 在的话则打印'我已经成功掌握Python',不在的话打印'加把劲,坚持学习就一定能掌握Python啦!'   

答案:

# 判断 Python 在技能元组 skills 里吗?
skills = ('英语六级', '吉他')
# Python 在技能列表里吗?
if 'Python' in skills:
print('我已经成功掌握Python。')
else:
print('加把劲,坚持学习就一定能掌握Python啦!')

还记得吗?字符串也是属于序列的噢。请你尝试一下,对字符串应该如何使用成员运算符呢。

# 判断'英语六级、吉他'内是否有'吉他'。
skills = '英语六级、吉他'
# 有的话则打印'skills里有吉他'。

答案:

# 判断'英语六级、吉他'内是否有'吉他'。
skills = '英语六级、吉他'
# 有的话则打印 'skills里有吉他'。
if '吉他' in skills:

print('skills里有吉他')
  1. 总结与练习

首先看看本关的知识点汇总。

可以保存一下图片,方便以后复习~

然后我们对本关的重难点做一个复习。我们今天学习了两种新的数据类型:列表和元组。列表使用中括号 [] 表示,元组用小括号 () 表示。

在列表里面,我们可以对元素进行索引取值,其中包括正索引及负索引。

正索引取值,从左往右数,从 0 开始取。而负索引取值,从右往左取,从 -1 开始取。

如果一个大列表里面还包含一个小列表的时候,要把这个小列表看作一个元素。

先取出大列表中的这个小列表元素,再对小列表进行索引取值。

回想一下,先从大书包里面拿小包,再从小包里面拿笔的例子。

格式即:list[索引][索引]

此外,我们还学习了元组,它和列表都可以存储数据,都用同样的方式索引取值。

不同于列表可以增改,元组一经创建则不可修改。

以上就是我们今天课程的所有内容及重难点知识,要记得多复习噢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值