從零開始,一起學python3(三)一一 關於“數組”


學過php的朋友應該知道,在其他語言里面的數組啊,列表啊,字典啊,在php里通通用一個數組就搞定了。但是既然學python了,就要注意區分,不要被其他語言的習慣影響了。

下面我以PHP開發人員的角度,來談談我對python里數組的看法。

首先,我們知道,php的數組分為“索引數組”和“關聯數組”。“索引數組”對應的就是python的列表(list),“關聯數組”對應的就是python的字典(dict)。

接下來詳細講講用法。

 

列表(list),左閉右開原則

list是一種有序的集合,可以隨時添加和刪除其中的元素。

也就是說,列表的下標是有序的,從0開始,可以根據下表讀取元素,也可以進行其他操作。

# 聲明、賦值
classmates = ['Michael', 'Bob', 'Tracy']
# 獲取列表的長度
classmates_len = len(classmates)
print(classmates)
print(classmates_len)
# 訪問列表元素(正數第幾個,從0開始)
print(classmates[0])
print(classmates[1])
# 訪問列表元素(倒數第幾個,從-1開始)
print(classmates[-1])
print(classmates[-2])
# 追加元素
classmates.append('Adam')
print(classmates)
# 插入元素到指定位置
classmates.insert(1, 'Jack')
print(classmates)
# 刪除列表末尾元素
classmates.pop()
print(classmates)
# 刪除指定位置元素
classmates.pop(1)
print(classmates)
# 刪除指定元素
classmates.remove('Bob')
# del語句
del classmate[2]
# 替換指定元素 classmates[1] = 'Sarah' print(classmates) # list里面的元素的數據類型也可以不同 L = ['Apple', 123, True] print(L) # 列表可嵌套 s = ['python', 'java', ['asp', 'php'], 'scheme'] # 打印php print(s[2][1])
# 分片(不影響原列表,可以看成是拷貝的后續行為)
color = ['red','white','blue','pink','orange','black','green']
slice = color[2:5]
print(slice) # >>> ['blue','pink','orange']
print(color) # >>> ['red','white','blue','pink','orange','black','green']
# 簡寫
slice = color[:2] # >>> 表示從0開始,相當於color[0:2]
slice = color[3:] # >>> 表示從序號3到最后全部
slice = color[:] # >>> 得到一份列表的拷貝



執行的結果:

 

range(5)可以生成一個list,生成的序列是從0開始小於5的整數

要計算1到n的累加和,只需要這樣

a = range(n+1)

sum = 0

for b in a:

     sum += b

這里是0+1+2+...+n,相當於1+2+。。。+n

字典(dict)

 Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。

也就是說,字典的下標不是有許多數字了,而是可以自定義的字符串,根據key也能很快找到value,是一種鍵值對的形式。就像查字典一樣

# 聲明、賦值
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Bob'])
# 把數據放入dict的方法,除了初始化時指定外,還可以通過key放入
d['Adam'] = 67
print(d)
# 替換
d['Adam'] = 33
print(d)
# 如果key不存在,dict就會報錯,為了避免報錯,可以用這樣的寫法,賦予默認值
print(d.get('Thomas', -1))
# 刪除某個元素
d.pop('Bob')
print(d)

執行的結果為:

 

 和list比較,dict有以下幾個特點:

  1. 查找和插入的速度極快,不會隨着key的增加而變慢;
  2. 需要占用大量的內存,內存浪費多。

而list相反:

  1. 查找和插入的時間隨着元素的增加而增加;
  2. 占用空間小,浪費內存很少。

所以,dict是用空間來換取時間的一種方法。

 

好了,在比較了這兩種數據后,我們來看看另外兩種類型。

 

元組(tupe)

元組就是不變的列表。

tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來。

如果你想定義一個空的tuple,你可以寫成 d = ()

這里要注意一個事情!如果想定義一個只有一個元素的元組時,不能直接這樣a = (3),這樣會被認為a = 3,因為()不僅是元組,也可以被認為是數學的小括號,會產生歧義。要定義的話要這樣寫

# 定義
a = (3,)
print(a)

執行的結果為:

tuple說是不變,其實也是相對的,比如

# "可變"tuple
b = ('a',23,['L','S'])
print(b)
b[2][1] = 'V'
print(b)

執行結果為:

 看似變了,其實,這個b[2]的指向一直沒變,只不是過他指向的那個list變了,這是list的事了,tuple管不了。tuple只是保證指向不變。

 

集合(set)

set和dict類似,也是一組key的集合,但不存儲value。由於key不能重復,所以,在set中,沒有重復的key。

# 創建set,set沒有重復元素,因為key不能重復
s = set([1,32,4])
print(s)
# 添加元素,重復的不會有效果
s.add(4)
s.add(5)
print(s)
# 通過remove(key)方法可以刪除元素
s.remove(4)
print(s)
s.add('sun')
print(s)

執行的結果:

 

總結一下:

key有序:列表(list),定義時用[]包裹,可變;元組(tuple),定義時用()包裹,不可變

key無序:字典(dict),定義時用{}包裹,鍵值對;set,定義時為a = set([...]),只有鍵,沒有值

 

注:python好像也有專門的數組array,好像說是要引用什么模塊。現在還沒接觸到,等接觸到了再更新這篇文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM