前面简单聊了字典与串列之後,接下来我想额外拉一篇轻松无负担的章节来描述与纪录一下关於 Python 的串列处理。
在 JavaScript 中我们有高达约二十种的阵列操作方法,为了避免怕你忘记,所以以下也列出来给你回味一下:
shift
unshift
pop
push
splice
sort
reverse
length
join
reduce
reduceRight
indexOf
lastindexOf
some
every
forEach
map
filter
slice
concat
那麽 Python 呢?也会有这些类似 JavaScript 一样多的阵列操作方法吗?基本上是有的,而这边我也尽可能依据两种模式来分类:
底下也会搭配简短的说明与范例来呈现。
所以这一篇相对会轻松一点,主要有点类似了解一下这些操作方法怎麽使用,如果这边有遗漏或者写错就多多见谅(因为实在太多啦~~~)。
我粗估算了一下我列出来的数量也刚刚好与 JavaScript 相同都是二十种,而这一篇我就不会放上任何迷因图哩。
基本上这边的分类有可能会因为你的操作而导致原始串列的改变,所以在使用上就要多加注意一下,否则你有可能会写出 Bug。
将资料往特定索引位置塞入,请注意第一个参数是索引位置,第二个则是要塞入的内容,除此之外,所以位置是以 0
当作起始点唷。
lis = ['A', 'B', 'C']
lis.insert(1, 'Q')
print(lis) # ['A', 'Q', 'B', 'C']
append
与 JavaScript 的 push
方法有 87% 像,因此你也可以把它理解成 push
语法,因为它会在串列的最後一个插入资料。
lis = ['A', 'B', 'C']
lis.append('Q')
print(lis) # ['A', 'B', 'C', Q]
pop
会将串列最後一笔给取出来:
lis = ['A', 'B', 'C']
print(lis.pop()) # C
print(lis) # ['A', 'B']
但是如果你传入索引位置的话,则会变成指定取出:
lis = ['A', 'B', 'C']
print(lis.pop(1)) # B
print(lis) # ['A', 'C']
extend
在翻译上是扩展、延长的意思,所以它的概念类似於串列相加的概念。
lisA = ['A', 'B', 'C']
lisB = ['D', 'E', 'F']
lisA.extend(lisB)
print(lisA) # ['A', 'B', 'C', 'D', 'E', 'F']
print(lisB) # ['D', 'E', 'F']
sort
非常的简单,就是将串列中的内容作排序,基本上而排序的方式则是会依据 ASCII 去排序。
lis = [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
lis.sort()
print(lis) # [5, 14, 16, 19, 30, 35, 42, 70, 98, 100]
reverse
应该不用太多的说明了,就是反转串列的意思。
lis = ['A', 'B', 'C', 'D', 'E', 'F']
lis.reverse()
print(lis) # ['F', 'E', 'D', 'C', 'B', 'A']
remove
在运作上是采用内容的方式去删除,假设如果你只知道该内容是什麽,但不知道索引位置,那就可以使用该方法。
lis = ['A', 'B', 'C', 'D', 'E', 'F']
lis.remove('D')
print(lis) # ['A', 'B', 'C', 'E', 'F']
clear 非常的乾脆,就是直接清空串列。
lis = ['A', 'B', 'C', 'D', 'E', 'F']
lis.clear()
print(lis) # []
接下来这边的操作上是不太会影响原有的串列。
len
非常好懂,与 JavaScript 的 length
非常相像,可以用於回传阵列长度。
lisA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(len(lisA)) # 10
lisB = ['r', 'a', 'y']
print(len(lisB)) # 3
找出串列中特定东西的索引位置,请注意 index
是以 0
为起始。
lis = ['r', 'a', 'y']
print(lis.index('r')) # 0
print(lis.index('a')) # 1
print(lis.index('y')) # 2
print(lis) # ['r', 'a', 'y']
reversed
与 reverse
非常的像,但是它不会影响原有的串列,因此反转後会回传一个新的串列,但请注意要使用 list
重新转换。
lis = ['A', 'B', 'C', 'D', 'E', 'F']
print(list(reversed(lis))) # ['F', 'E', 'D', 'C', 'B', 'A']
print(lis) # ['A', 'B', 'C', 'D', 'E', 'F']
sorted
与 sort
也非常类似,但是它并不会影响到原有的串列。
lis = [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
print(sorted(lis)) # [5, 14, 16, 19, 30, 35, 42, 70, 98, 100]
print(lis) # [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
list
虽然可以拿来做转换,但是它也可以拿来拷贝一份新的阵列。
在看范例之前,我想先补充一下,下面范例我有使用一个很特别的方法叫做 id()
,这个方法可以回传记忆体的位置,而会在前面提到这个是因为我们会使用 list
拷贝一份串列出来,为了验证两者串列的不同才会使用 id()
。
lisA = [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
lisB = list(lisA)
print(id(lisA)) # 4464143936
print(id(lisB)) # 4464824640
lisA[0] = 1
print(lisB) # [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
看到 slice
先不要兴奋,在 Python 中的 slice
用法比较特别一点,主要是用 [:]
来切割串列,而不是 slice()
语法。
从起始 0 取到索引 4 的位置:
lisA = ['A', 'B', 'C', 'D', 'E', 'F']
lisB = lisA[:4]
print(lisA) # ['A', 'B', 'C', 'D', 'E', 'F']
print(lisB) # ['A', 'B', 'C', 'D']
从起始索引 2 到 4 的位置:
lisA = ['A', 'B', 'C', 'D', 'E', 'F']
lisB = lisA[2:4]
print(lisA) # ['A', 'B', 'C', 'D', 'E', 'F']
print(lisB) # ['C', 'D']
从索引 3 开始往後取得全部:
lisA = ['A', 'B', 'C', 'D', 'E', 'F']
lisB = lisA[3:]
print(lisA) # ['A', 'B', 'C', 'D', 'E', 'F']
print(lisB) # ['C', 'D', 'F']
copy
方法就非常直觉就是拷贝的意思:
lisA = [14, 30, 35, 42, 5, 16, 70, 98, 19, 100]
lisB = lisA.copy()
print(id(lisA)) # 4464143936
print(id(lisB)) # 4464824640
filter
用法其实与我们在写 JavaScript filter
语法雷同可以用来做筛选资料的行为:
lisA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def count(item):
return item % 2 == 0
newList = filter(count, lisA)
print(list(newList)) # [2, 4, 6, 8, 10]
print(lisA) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
map
会建立一个新的阵列,然後依据你传入的函式去回传。
lisA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def count(item):
return item + item
newList = map(count, lisA)
print(list(newList)) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
print(lisA) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
any
概念类似 JavaScript 的 some
,只要里面有一个 True
那麽就会回传 True
。
lisA = [True, True, True]
print(any(lisA)) # True
lisB = [True, True, False]
print(any(lisB)) # True
all
对比 JavaScript 的话,则是 every
,只要有一个是 False
那麽就会回传 False
。
lisA = [True, True, True]
print(all(lisA)) # True
lisB = [True, True, False]
print(all(lisB)) # False
join
会依据你传入的变数内容来转换成另一种形式呈现,而这个在呈现上也与 JavaScript 非常雷同。
lisA = ['A', 'B', 'C']
lisB = ['D', 'E', 'F']
s = '-'
print(s.join(lisA)) # A/B/C
print(lisA) # ['A', 'B', 'C']
因为改买了绍兴酒,所以今天跑去全联买了鸡蛋与去骨鸡腿,只是这一次额外尝试挑战绍兴酒蛋,但酒蛋必须是溏心蛋,所以只好明天来研究一下如何制作溏心蛋。
<<: Day 7:How do you turn this on? KMM是如何做到的?
>>: EP 4: Use Fonts to design Icon in TopStore App
在 JavaScript 中有 6 种不同的资料类型: 1.string 2.number 3.bo...
一直遭到攻击的山姆,生命值也快用尽了。 「快离开我们的地盘!」山姆被 Rain 跟 Storm 团...
大家~ 今天文章会也会很短Q 昨天讲了静态网站可以部署到哪里之後,今天来讲 Next.js 的专案可...
今天又要教到新的容器啦~(怎麽Python容器这麽多(。ŏ_ŏ) 字典,这种容器的元素格式很特别哦,...
Agile 汇出 Document 本节汇出文件Document资料和料号雷同,同样继承Item物件...