30天学会 Python: Day 4-《资料Collection》

容器(Collection)

可以同时储存多个资料的资料类型,可以达到用一个变数名称储存多个数值的功能

Python 内建4种容器: List, Tuple, Set, Dict,这4个容器的特性都不太一样,互相结合後可以达到不同的效果

串列(List)

有序,内容可重复且可以任意增加、删除、修改的容器,其中的一笔资料称为一个
元可以是任何型别的资料,同一个串列中的元可以是不同型别

串列就像是火车,一列火车可以拉很多节货柜,元就像是货柜,货柜装什麽都可以
有五个货物,火车就拉五节货柜

需要多载一项货物就多拉一节货柜

火车的货柜可以随时拿掉,编号会跟着变动

但不管怎麽增减、有多少货柜,它还是同一列火车

建立串列

用中括号[] 或是 list() 建立空的串列

myList = []
print(myList)

或是

myList = list()
print(myList)

执行结果:

要设定串列的元,可以用逗号将数值隔开

myList = [1, 22, 345]
print(myList)

元的型别可以不同

myList = [1, '22', 0.123, False]
print(myList)

取得串列的元

在串列变数的後方加上中括号 [] 和一个数字(索引),可以取得串列中的其中一个元

  • 索引(Index)
    代表元在容器中的编号或是顺序,索引从 0 开始,所以第一个元的索引是0,第二笔是1...以此类推
    Python 中的索引可以是负值,代表倒数第几个,-1表示倒数第一个元,-2是倒数第二个
myList = [1, 22, 345]
print("第一项", myList[0])
print("第二项", myList[1])
print("第三项", myList[2])

myList = [1, 22, 345]
print("倒数第一项", myList[-1])
print("倒数第二项", myList[-2])
print("倒数第三项", myList[-3])

Slice 可以取得多个元,语法是:

[start: stop: step]

代表从 start 开始,每 step 项取一次(预设为1可以省略),直到 stop 为止(这一项不包含)

myList = [1, 22, 25, 2, 4, 3, 3]
print(myList[1:4])

[1:4:1] 代表索引是 1, 2, 3 的元

start, stop 可以是负数

myList = [1, 22, 25, 2, 4, 3, 3]
print(myList[-4:-1])

start 是0(从第一项开始)时可以省略

myList = [1, 22, 25, 2, 4, 3, 3]
print(myList[:4])

[:4] 代表索引是 0, 1, 2, 3 的元

stoplen(myList) (取到最後一项)时可以省略

myList = [1, 22, 25, 2, 4, 3, 3]
print(myList[3:])

[3:] 代表索引是 3, 4,..., -2, -1的元

step 是1(全都要的时候)可以省略

start, stop 都省略,但 step 不为预设值时,前面的冒号不能省略

myList = [1, 22, 25, 2, 4, 3, 3]
print(myList[::2])

[::2] 代表第一项到最後一项,每两项取一个

常用函式

以下是几个常和串列一起使用的函式

len()

回传一个整数,为串列的长度,也就是元的数量

myList = [1, 22, 345]
print(len(myList))

sum()

回传所有元的总合

myList = [1, 22, 345]
print(sum(myList))

max()

回传串列中值最大的元

myList = [1, 22, 345]
print(max(myList))

min()

回传串列中值最小的元

myList = [1, 22, 345]
print(min(myList))

方法(Method)

方法类似函式,可以代表动作或是运算,但方法必须透过物件才能呼叫,且结果和目的会和物件有很大的关系,语法是:

<物件>.<方法名称>(<引数>)

常用方法

append(obj)

将物件 obj 加入串列的最後

myList = [1, 22, 345]
myList.append(10)
print(myList)

extend(obj)

如果用 append() 将一个串列加到另一个串列,那会变成加入一个是串列的元

list1=[1, 22, 345]
list2=[1, 2, 3]
list1.append(list2)

print(list1)


类似货柜被往上叠的概念

如果要将物件 obj 内的元加入串列,要用 extend(obj)

list1=[1, 22, 345]
list2=[1, 2, 3]
list1.extend(list2)

print(list1)

insert(i, obj)

将物件 obj 插入串列索引为 i 的位置,原本在这个位置之後的元则会向後移动

myList = [1, 22, 345]
myList.insert(2, 5)
print(myList)

remove(x)

移除第一个和 x 相等的元,并将後方的元向前移动

myList = [1, 22, 345]
myList.remove(22)
print(myList)

pop(i = -1)

移除索引为 i 的元,并 回传 元的值
预设为移除最後一笔

myList = [1, 22, 345]
a=myList.pop()
print(myList)
b=myList.pop(1)
print(myList)
print(a, b)

clear()

移除所有的元

myList = [1, 22, 345]
myList.clear()
print(myList)

reverse()

将串列反转

myList = [1, 22, 345]
myList.reverse()
print(myList)

sort(reverse = False)

将串列的元由值的大小排列,预设由小到大排列,当 reverseTrue 时由大到小

myList = [1, 22, 345, 55, 43]
myList.sort()
print(myList)

myList.sort(reverse=True)
print(myList)

count(x)

回传串列中有几个值为 x 的元

myList = [1, 22, 22, 22, 4, 3, 3]
print(myList.count(0))
print(myList.count(3))
print(myList.count(22))

复制串列

如果先建立一个 list1,再把 list1 指派给 list2,会发现两个变数的资料是一起变动的,也就是说这个串列变成有两个名字

list1 = [1, 2, 5, 7, 8]
list2 = list1

list2.append(2)
print(list1, list2)

list1.remove(5)
print(list1, list2)

list1remove() 将2移除,list2 的2也跟着不见,所以两个变数代表的是同样的资料

如果要达到复制的效果有两种方法:

  1. extend()list1 的元加到 list2
list1 = [1, 2, 5, 7, 8]
list2 = [].extend(list1)

list2.append(2)
print(list1, list2)

list1.remove(5)
print(list1, list2)
  1. list2 指派为 list1.copy()
list1 = [1, 2, 5, 7, 8]
list2 =list1.copy()

list2.append(2)
print(list1, list2)

list1.remove(5)
print(list1, list2)

list1remove() 将2移除,list2 的2没有不见,所以两个变数代表的是不同的资料


挖坑清单:

  • 空字串的用途
  • 物件

<<:  30天学会C语言: Day 4-输入个资料怎麽那麽麻烦啦

>>:  Day 0xA - WebHook Api 建立( part 2 )

【程序】简说重构 转生成恶役菜鸟工程师避免 Bad End 的 30 件事 - 26

简说重构 何时、为何重构 重构难题 重构策略 ...

30天打造品牌特色电商网站 Day.17 微互动设计按钮实作(3)

今天就来继续做网站元件的介绍,在电商网站中常需要使用到下拉式选单,像是在做商品尺寸的选择、颜色的选择...

Day27 vue.js简易照片上传功能(base64)

延续昨日 今天我们来处理一下新增帐户的照片 这是我们目前的修改帐户页面 首先先把layout做出来 ...

软件测试覆盖率分析(测试粒度最细)-表达式(expressions)和决策结构

颗粒可视为测量单元。当我们说我们的软件被测试了50%,或者测试覆盖率是50%,这到底是什麽意思,因为...

快速了解 Tailwind CSS 的 JIT 模式

线上范例:JIT 线上范例 - Tailwind Play 因为 Tailwind CSS 的设计...