Day 10:Python基本介绍03 | List、Tuple

各位早安阿~ 不知不觉间已经来到铁人赛第十天,也就是过完1/3了呢,想想还真是快。只不过今天就开学了,希望开学後还能坚持下去每天发文?。

Collections(容器)

回想一下昨天的情况都是一个变数(Variable)对应到一个资料(Data)对吧? 但如果我们想要存的是好几笔资料呢? 这时候就要用到Collections了。Python提供四种Collections,分别是List、Tuple、Set、Dictionary,每个Collection都有各自的特色和使用时机。因为篇幅有限,今天我们先讲前两个List和Tuple

List(列表)

List(列表)是一个有序、可更改、可重复的一群资料,你可以把它想像成我有一个糖果罐,你按照顺序地把一一糖果放进去,你可以随时拿取这个容器里的糖果,也可以更改容器里的糖果口味。

容器 - 糖果罐

要如何产生一个糖果罐呢? 需要以下指令:

candyCan = ["apple", "strawberry", "grape", "mango"]

List是使用 方括号 包围住,并用 逗号 区隔每笔资料。
也可以使用list()将产生空的List,或将其他容器转为List。

以上面的例子为例:你产生了一个糖果罐 (List),并且里面已经有四种口味的糖果 (资料) 了,分别是apple, strawberry、grape和mango。

Python很方便,只要使用 print(List名称) 就可以显示List的内容。

糖果罐有几颗糖果?

还记得昨天教的吗? 使用 len() 函式就可以罗。

资料型态是...?

像昨天一样使用 type() 检查,就会发现List的资料型态是一个新的形态,就叫做 <class 'list'>

# demo01
candyCan = ["apple", "strawberry", "grape", "mango"]

print(candyCan)
print(len(candyCan))
print(type(candyCan))

执行结果:

['apple', 'strawberry', 'grape', 'mango']
4
<class 'list'>

如何取出糖果?

使用索引值(index)

就如同刚才所说的,List是有序的一群资料,所以资料就像在排队一样,每个资料都有一个编号,也就是索引值。

索引值从0开始(这对写程序来说非常非常非常重要! 你想要写程序的话,就一定要先接受这个概念),所以第一个资料的索引值是0,第二个资料的索引值是1,其他依此类推。

假如我们现在想要 strawberry,它是第二笔资料,所以它的索引值是1,那麽指令就会是:

print(candyCan[1])

执行结果:

strawberry

如果索引值是负的,则代表倒数第几个。

print(candyCan[-1])

执行结果:

mango

使用区段

就像昨天 Slicing String 一样,[n:m] 表示从n取到m-1,返回一个新的List。

print(candyCan[1:3])

执行结果:

['strawberry', 'grape']

ps. 事实上,你也可以将字串想像成由字元所组成的List,方法大致上是共通的。

检查资料有没有在List中

使用 data in list 来检查资料有没有在List中,有则回传 True,没有则回传 False

print("apple" in candyCan)
print("banana" in candyCan)

执行结果:

True
False

如何改变糖果口味?

很简单,只要将 list[index] = newDate 这样就好。

candyCan[1] = "peach"
print(candyCan)

执行结果:

['apple', 'peach', 'grape', 'mango']

如何增加新的糖果?

添加资料(append)

使用 append() 将资料放在List最後面。

candyCan.append("banana")
print(candyCan)

执行结果:

['apple', 'strawberry', 'grape', 'mango', 'banana']

插入资料(insert)

使用 insert() 将资料插入List中指定的索引值,原位置的资料会被往後移。

candyCan.insert(1, "orange")
print(candyCan)

执行结果:

['apple', 'orange', 'strawberry', 'grape', 'mango']

合并资料(extend)

使用 extend() 将两个List合并在一起,就像字串的Concatenation。

newCandy = ["banana", "orange"]
candyCan.extend(newCandy)
print(candyCan)

执行结果:

['apple', 'strawberry', 'grape', 'mango', 'banana', 'orange']

使用时机

List的使用时机非常的广,基本上只要你是想存放一堆资料,而且会经常更改其中的值的时候,就很适合使用List。

Tuple(元组)

Tuple(元组)是一个有序、不可更改、可重复的一群资料,特性上跟List满像的,但差在Tuple不能够随意更改里面的资料。想像Tuple是一个上锁的糖果罐,只能够从糖果罐外面查看有什麽糖果,但没办法新增、更改和移除里面的糖果。

candyCan = ("apple", "strawberry", "mango", "peach", "grape")

Tuple(元组) 是使用 圆括号 包围住,并用 逗号 区隔每笔资料。
也可以使用tuple()将产生空的Tuple,或将其他容器转为Tuple。

不能更改是什麽意思? 看一下以下的例子:

candyCan[1] = "banana"

执行後出现这个错误讯息:

Traceback (most recent call last):
  File "d:\云端\Code\2021-IT-30days\Code\Day 10\demo08.py", line 3, in <module>
    candyCan[1] = "banana"
TypeError: 'tuple' object does not support item assignment

Python就很明确地告诉你了,Tuple不能任意更改资料。

但还是可以查看里面有什麽资料。

print(candyCan)
print(len(candyCan))

print(candyCan[0])
print(candyCan[1:3])

执行结果:

('apple', 'strawberry', 'mango', 'peach', 'grape')
5
apple
('strawberry', 'mango')

不过基本上List大部分的函式Tuple都不能用,Tuple唯二的函式为 count()index()count() 用来计算指定资料的数量,index() 用来寻找指定资料的索引值。

print(candyCan.count("mango"))
print(candyCan.index("mango"))

执行结果:

1
2

使用时机

基本上Tuple用於传送一组资料时相当好用,因为其不可更改的特性,可以保证资料不会在传送途中被不小心更改到。

小结

今天我们学到Python总共有四种Collections,分别是List、Tuple、Set、Dictionary,通常用於处理好几笔资料的时候,而我们今天特别讲其中两种,List和Tuple。

  • List 具有有序、可更改、可重复之特性,我们可以轻易的新增、移除、更改List中的资料。
  • Tuple 具有有序、不可更改、可重复之特性,我们不能更改Tuple中的资料,需要先将Tuple转回List才可以修改。

明天我们会学到Python剩下的两种Collections,Set和Dictionary,敬请期待~


如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~

本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~

有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。


<<:  [Day07] swift & kotlin 入门篇!(5) 基础语法-集合物件

>>:  [Day 15] JavaScript 与浏览器的沟通

[Day02 - 规划与设计] 从生活中发想需求

发想自己的需求,看看生活中有什麽是想要改进的或是解决的,再来立定一个主题吧! 目前比较烦恼的大概是:...

Day 1:开始前的准备

缘起 各位好~我是一个软件工程师,追求每年都要有不一样的进步,今年追求的是把自己的基底在打的更稳,之...

Python random 套件

今天要来介绍的是random套件,这也是个非常实用的套件,他主要是用来在范围内随机取某一个数或资料,...

从 IT 技术面细说 Search Console 的 27 组数字 KPI (2) 流量 (1)

Search Console 中数百数千个数字中,若只拿一个数字给老版看的话,该看那一个,答案很简单...

【把玩Azure DevOps】Day25 接收Azure DevOps的通知:Microsoft Teams频道中的连结器

我相信如果是使用微软产品的公司,大多数也都有使用Microsoft Teams作为公司内部的IM讯息...