前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python入门教程笔记(三)数组

Python入门教程笔记(三)数组

作者头像
Lemon黄
发布2020-10-19 09:54:57
6000
发布2020-10-19 09:54:57
举报
文章被收录于专栏:Lemon黄Lemon黄Lemon黄

十九、什么是容器、什么是list

生活中,容器指的是可以容纳物品的收纳器,在程序中,容器是一种可以把多个元素放在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in等关键字判断某个元素是否包含在容器中。

容器

在Python中,包括列表(list)、元组(tuple)、字典(dict)、集合(set)等,他们都可以放入多个元素,因此都可以算作是容器,这些容器是Python编程中非常重要的数据结构,我们接下来重点学习这些数据结构。

list

列表(list)是一种有序的容器,放入list中的元素,将会按照一定顺序排列。构造list的方法非常简单,使用中括号[]把需要放在容器里面的元素括起来,就定义了一个列表。 比如列出所有同学们的成绩:

scores = [45, 60, 75, 86, 49, 100]

列出所有同学们的名字:

names = ['Alice', 'Bob', 'David', 'Ellena'] # 注意,字符串元素仍需要引号

正如我们看到的,list可以放入数字、字符串等数据类型,list不对放入其中的类型进行判断,也就是说,list可以同时放入任意类型的数据,这是Python这门语言决定的,因为Python是动态语言。

L = ['Alice', 66, 'Bob', True, 'False', 100]

对于list,我们可以直接把list的内容打印出来。

L = ['Alice', 66, 'Bob', True, 'False', 100]
print(L)

二十、按顺序访问list

列表是有序的,因此我们可以按顺序访问列表中的元素。

L = ['Alice', 66, 'Bob', True, 'False', 100]
for item in L:
    print(item)

回想一下,在前面,我们学习过字符串,这里使用for循环访问列表中的每一个元素和使用for循环访问字符串中的每一个字符是非常类似的。

事实上字符串也可以看作是一种特殊的列表,它只能按顺序存放多个字符。通过for循环访问列表每一个元素的方式,我们称为迭代。

而对于一个空的列表,使用for循环访问,将不会打印任何东西。

L = []
for item in L:
    print(item)

二一、按索引访问list

由于列表list是一个有序的容器,所以在list里面,每一个元素都有一个唯一的位置,我们称之为索引(index),这和字符串是类似的,因此我们也可以通过位置的方式获取list中的元素,回顾一下前面学习的,我们通过中括号[]来按位置访问对应的元素。 注意,这里要注意区分,列表的定义也是通过中括号[]来定义的,但这和通过索引访问列表里面的元素并不冲突

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[0])
print(names[1])
print(names[2])
print(names[3])

由于names只有四个元素,所以我们最多只能通过索引3访问到最后一个元素。试想一下,如果我们print(names[4]),会怎么样?

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[4])

事实上,这会引起Python运行的错误,提示索引访问超出范围。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

因此,我们在使用索引的方式访问列表时,一定要特别注意不要越界。

同时,列表和字符串一样,也支持切片,通过切片的方式,获取到列表的子列表。

names = ['Alice', 'Bob', 'David', 'Ellena']
sub_names = names[0:2]
print(sub_names)

这里需要注意一下,如果我们越界切片的话,不会出现Python运行错误,但是按照这样的下标去切片,获取不到任何元素。

names = ['Alice', 'Bob', 'David', 'Ellena']
sub_names = names[5:10]
print(sub_names) # ==> []

二三、倒序访问list

Python的列表,除了支持正向顺序索引获取列表中的每一个元素以外,也支持倒序访问list中的每一个元素。

names = ['Alice', 'Bob', 'David', 'Ellena']

对于names列表,Ellena的名字排在最后,也就是我们所说的倒数第一个,在Python中,可以使用-1来表示最后一个元素。

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[-1]) # ==> Ellena

同样的道理,我们可以通过-2,打印出David的名字,通过-3,打印出Bob的位置。

print(names[-2]) # ==> David
print(names[-3]) # ==> Bob

注意,如果我们使用-5的话,因为不存在倒数第五个名字,因此这也是一种越界,同样会报错。

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[-5])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

二四、向list添加新的元素

现在班里面有4名同学:

names = ['Alice', 'Bob', 'David', 'Ellena']

今天,班里转来一名新同学Candy,如何把新同学添加到现有的列表当中呢? 在Python中,list提供了一系列的方法可以让我们操作list中的元素,其中也包含了添加元素的方法。 第一个办法是用append()方法,把新同学追加到列表的末尾:

names = ['Alice', 'Bob', 'David', 'Ellena']
names.append('Candy')
print(names) # ==> ['Alice', 'Bob', 'David', 'Ellena', 'Candy']

注意,append()方法总是将元素添加到list的尾部。 如果上面的列表需要按照首字母排序的话,那么Candy应该是排在第三的位置的,这怎么办呢?

这就需要使用list的insert()方法,insert()方法和append()方法不一样,insert()方法需要两个参数,分别是需要插入的位置,以及需要插入的元素。

names = ['Alice', 'Bob', 'David', 'Ellena']
names.insert(2, 'Candy')
print(names) # ==> ['Alice', 'Bob', 'Candy', 'David', 'Ellena']

注意,将Candy插入到第三的位置之后,原来的名字,都将自动往后移动一位,这个时候再使用相同的索引获取后面的元素,将会得到不一样的结果

names = ['Alice', 'Bob', 'David', 'Ellena']
print(names[2]) # ==> David
names.insert(2, 'Candy')
print(names[2]) # ==>Candy

二五、从list删除元素

如果Ellena因为家庭原因需要转学,那么我们如何把Ellena从已有的列表里面删除呢?

这个时候我们可以使用列表的pop()方法,pop()方法默认删除列表的最后一个元素,并返回。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name = L.pop()
print(name) # ==> Ellena
print(L) # ==> L = ['Alice', 'Bob', 'Candy', 'David']

对于Ellena,由于Ellena恰好位于列表的最后,所以可以直接使用pop()方法把Ellena从列表的最后删除,假如需要转学的不是Ellena,而是Candy,这个时候应该怎么办呢?

pop()方法,除了可以删除最后一个元素以外,pop()还可以接收一个参数,指定需要删除的元素的位置。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
name = L.pop(2)
print(name) # ==> Candy
print(L) # ==> ['Alice', 'Bob', 'David', 'Ellena']

二六、替换list中的元素

对于列表,除了可以向列表添加元素,删除列表元素以外,列表已有的元素,也是可以修改的,通过索引指定位置,并赋值新的元素,即可替换列表中原有的元素。

假如班上同学Candy需要转走了,同时有一个新的同学Canlina转入,那么按照字母排序,Canlina的位置恰好是Candy的位置。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
L[2] = 'Canlina'
print(L)

我们也可以使用倒序索引来完成同样的功能。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
L[-3] = 'Canlina'
print(L)

注意,如果替换一个不存在的下标,则同样会引起Python运行错误。

L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
L[6] = 'Canlina'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

二七、二维list

有时候,一维list并不能满足所有的要求(上述所有list均为一维list),这个时候需要二维list甚至更高维的list。

比如: Alice最近的三次成绩分别是[100, 89, 92] Bob最近的三次成绩分别是[70, 65, 81] Candy最近的三次成绩分别是[88, 72, 77] 如果需要用一个列表存放三个同学的成绩,则需要这样:

alice_scores = [100, 89, 92]
bob_scores = [70, 65, 81]
candy_scores = [88, 72, 77]
all_scores = [alice_scores, bob_scores, candy_scores]
print(all_scores) # ==> [[100, 89, 92], [70, 65, 81], [88, 72, 77]]

这个时候得到的就是一个二维list,对于二维list,列表里面的每一个元素仍然是一个列表。这个时候,如果需要从二维list all_scores获取Bob最近第三次考试的成绩,可以这样写:

alice_scores = [100,89,92]
bob_scores = [70,65,81]
candy_scores = [88,72,77]
all_scores = [alice_scores, bob_scores, candy_scores]
score = all_scores[1][2] # ==> 81

其中all_scores[1]得到Bob的最近三次成绩的列表,再通过下标[2],则可以得到Bob第三次的成绩。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 十九、什么是容器、什么是list
    • 容器
      • list
      • 二十、按顺序访问list
      • 二一、按索引访问list
      • 二三、倒序访问list
      • 二四、向list添加新的元素
      • 二五、从list删除元素
      • 二六、替换list中的元素
      • 二七、二维list
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档