1. 程式人生 > >python中陣列的使用

python中陣列的使用

1、Python的陣列分三種類型:
(1) list 普通的連結串列,初始化後可以通過特定方法動態增加元素。
定義方式:arr = [元素]

(2) Tuple 固定的陣列,一旦定義後,其元素個數是不能再改變的。
定義方式:arr = (元素)

(2) Dictionary 詞典型別, 即是Hash陣列。
定義方式:arr = {元素k:v}

2、下面具體說明這些陣列的使用方法和技巧:

(1) list 連結串列陣列
a、定義時初始化

a = [1,2,[1,2,3]]

b、定義時不初始化
一維陣列:
arr = []

多維陣列:
arr = [i for i in range(10), 1,[]] #注意, i for in xx 這個必須放在第一個位置,否則要先定義i,

如:
arr = [i for i in range(5), j for j in range(5), []]

這是錯誤的
i = 0
j = 0
arr = [i for i in range(5), j for j in range(5), []]

這是正確的

c、del 語句 和 : 的用法
可以用 start : end 表示數組裡的一個區間 ( i >= start and i < end)
del 刪除數組裡的指定元素
如: del arr[0]
        del arr[0, 2]
       newarr = arr[0, 2]

d、遍歷陣列:
for k, v in enumerate(arr):
        print k, v

e、增加元素:
一維
arr.append('aaa')
二維
arr[0].append('aaa')
如果要在任意位置插入用 arr.insert(n, 值)
此外還有一種特殊的用法是:
arr += [陣列元素]
在不指定下標的情況下,是允許用 += 增加陣列元素的。

(2) Tuple 固定陣列

Tuple 是不可變 list,一旦建立了一個 tuple 就不能以任何方式改變它。
下面拿具體示例說明:
>>> t = ("a", "b", "c", "d", "e")              #[1] 用小括號包圍來定義
>>> t
('a', 'b', 'c', 'd', 'e')
>>> t[0]                                       #[2] 直接列出某下標的元素
'a'
>>> t[-1]                                      #[3] 負數表示,從後面倒數的索引 -1 為倒數第一個, 0是順數第一個
'example'
>>> t[1:3]                                     #[4] 這裡 1:3 是 i>=1 and i<3 的區間
('b', 'mpilgrim')

Tuple 沒有的方法:
[1] 不能向 tuple 增加元素,沒有 append 、 extend 、insert 等方法。
[2] 不能從 tuple 刪除元素,沒有 remove 或 pop 方法。
[3] 不能在 tuple 中查詢元素,沒有 index 方法(index是查詢而不是索引,索引直接用下標即可,如:t[0])。

使用 tuple 的好處:
* Tuple 比 list 操作速度快。如果您定義了一個值的常量集, 並且唯一要用它做的是不斷地遍歷它, 請使用 tuple 代替 list。
* 如果對不需要修改的資料進行 “防寫”, 可以使程式碼更安全。使用 tuple 而不是 list 如同擁有一個隱含的 assert 語句, 說明這一資料是常量。如果必須要改變這些值, 則需要執行 tuple 到 list 的轉換 (需要使用一個特殊的函式)。
* 還記得我說過 dictionary keys 可以是字串, 整數和 “其它幾種型別”嗎? Tuples 就是這些型別之一。 Tuples 可以在 dictionary 中被用做 key, 但是 list 不行。實際上, 事情要比這更復雜。Dictionary key 必須是不可變的。Tuple 本身是不可改變的, 但是如果您有一個 list 的 tuple, 那就認為是可變的了, 用做 dictionary key 就是不安全的。只有字串, 整數或其它對 dictionary 安全的 tuple 才可以用作 dictionary key。

Tuple 可以轉換成 list, 反之亦然。
轉換方式為:
t = list( t )
反之:
arr = tuple( arr )

(2) Dictionary (雜湊陣列)詞典陣列


#Dictionary 的用法比較簡單,它可以儲存任意值,並允許是不同型別的值,下面例項來說明:
#下面例子中 a 是整數, b 是字串, c 是陣列,這個例子充分說明雜湊陣列的適用性。
dict_arr = {'a': 100, 'b':'boy', 'c':['o', 'p', 'q']}

#可以直接增加一個元素,如果同名,則會改變原來的key的元素的值
dict_arr['d'] = 'dog'

#輸出所有的key
print dict_arr.keys()

#輸出所有的value
print dict_arr.values()

#遍歷陣列
import types
for k in dict_arr:
    v = dict_arr.get(k)
    if type(v) is types.ListType: #如果資料是list型別,繼續遍歷
        print k, '---'
        for kk, vv in enumerate(v):
            print kk, vv
        print '---'
    else:
        print dict_arr.get(k)
list的方法
L.append(var) #追加元素
L.insert(index,var)
L.pop(var) #返回最後一個元素,並從list中刪除之
L.remove(var) #刪除第一次出現的該元素
L.count(var) #該元素在列表中出現的個數
L.index(var) #該元素的位置,無則拋異常
L.extend(list) #追加list,即合併list到L上
L.sort() #排序
L.reverse() #倒序
list 操作符:,+,*,關鍵字del
a[1:] #片段操作符,用於子list的提取
[1,2]+[3,4] #為[1,2,3,4]。同extend()
[2]*4 #為[2,2,2,2]
del L[1] #刪除指定下標的元素
del L[1:3] #刪除指定下標範圍的元素
list的複製
L1 = L #L1為L的別名,用C來說就是指標地址相同,對L1操作即對L操作。函式引數就是這樣傳遞的
L1 = L[:] #L1為L的克隆,即另一個拷貝。

list comprehension
[ <expr1> for k in L if <expr2> ]

2、dictionary: 字典(即C++標準庫的map)
dict = {‘ob1′:’computer’, ‘ob2′:’mouse’, ‘ob3′:’printer’}
每一個元素是pair,包含key、value兩部分。key是Integer或string型別,value 是任意型別。
鍵是唯一的,字典只認最後一個賦的鍵值。

dictionary的方法
D.get(key, 0) #同dict[key],多了個沒有則返回預設值,0。[]沒有則拋異常
D.has_key(key) #有該鍵返回TRUE,否則FALSE
D.keys() #返回字典鍵的列表
D.values()
D.items()

D.update(dict2) #增加合併字典
D.popitem() #得到一個pair,並從字典中刪除它。已空則拋異常
D.clear() #清空字典,同del dict
D.copy() #拷貝字典
D.cmp(dict1,dict2) #比較字典,(優先順序為元素個數、鍵大小、鍵值大小)
#第一個大返回1,小返回-1,一樣返回0

dictionary的複製
dict1 = dict #別名
dict2=dict.copy() #克隆,即另一個拷貝。

3、tuple:元組(即常量陣列)
tuple = (‘a’, ‘b’, ‘c’, ‘d’, ‘e’)
可以用list的 [],:操作符提取元素。就是不能直接修改元素。

4、string: 字串(即不能修改的字元list)
str = “Hello My friend”
字串是一個整 體。如果你想直接修改字串的某一部分,是不可能的。但我們能夠讀出字串的某一部分。
子字串的提取
str[:6]
字串包含 判斷操作符:in,not in
“He” in str
“she” not in str

string模組,還提供了很多方法,如
S.find(substring, [start [,end]]) #可指範圍查詢子串,返回索引值,否則返回-1
S.rfind(substring,[start [,end]]) #反向查詢
S.index(substring,[start [,end]]) #同find,只是找不到產生ValueError異常
S.rindex(substring,[start [,end]])#同上反向查詢
S.count(substring,[start [,end]]) #返回找到子串的個數

S.lowercase()
S.capitalize() #首字母大寫
S.lower() #轉小寫
S.upper() #轉大寫
S.swapcase() #大小寫互換

S.split(str, ‘ ‘) #將string轉list,以空格切分
S.join(list, ‘ ‘) #將list轉string,以空格連線

處理字串的內建函式
len(str) #串長度
cmp(“my friend”, str) #字串比較。第一個大,返回1
max(‘abcxyz’) #尋找字串中最大的字元
min(‘abcxyz’) #尋找字串中最小的字元

string的轉換

oat(str) #變成浮點數,float(“1e-1″) 結果為0.1
int(str) #變成整型, int(“12″) 結果為12
int(str,base) #變成base進位制整型數,int(“11″,2) 結果為2
long(str) #變成長整型,
long(str,base) #變成base進位制長整型,

字串的格式化(注意其轉義字元,大多如C語言的,略)
str_format % (引數列表) 

相關推薦

Python陣列矩陣的翻轉(翻轉180度,向左翻轉90度,向右翻轉90度)

Python中陣列矩陣的翻轉(翻轉180度,向左翻轉90度,向右翻轉90度) 轉載請表明原處:https://blog.csdn.net/kane7csdn/article/details/83928848 先定義陣列: a = np.array(([1, 2, 3], [4, 5,

Python陣列按行儲存,與Matlab不同

陣列因為是線性結構,因此在記憶體中都是順序儲存的,但按行儲存還是按列儲存,不同語言有不同的規定。matlab是按列儲存的,而C/C++和python是按行儲存的 。 以二維陣列為例: #python import numpy as np >>

python陣列(numpy.array)的基本操作

本文部分內容參考Daetalus的部落格。 為什麼要用numpy Python中提供了list容器,可以當作陣列使用。但列表中的元素可以是任何物件,因此列表中儲存的是物件的指標,這樣一來,為了儲存

python陣列的使用

1、Python的陣列分三種類型: (1) list 普通的連結串列,初始化後可以通過特定方法動態增加元素。 定義方式:arr = [元素] (2) Tuple 固定的陣列,一旦定義後,其元素個數是不能再改變的。 定義方式:arr = (元素) (2) Dictionary 詞典型別, 即是Hash陣列。

python陣列的操作

1、Python的陣列分三種類型: (1) list 普通的連結串列,初始化後可以通過特定方法動態增加元素。 定義方式:arr = [元素] (2) Tuple 固定的陣列,一旦定義後,其元素個數是不能再改變的。 定義方式:arr = (元素) (2) Dictionary 詞典型別, 即是Hash陣列

Python陣列及矩陣的大小

在上篇博文中介紹了python中常見的二維陣列:list與numpy.array。在很多情況下我們需要獲取陣列的大小,閱讀過一些python程式碼可以發現,常見的方法一般有len, size, shape這三種,那麼這三種方法分別應用於那些場合?有什麼區別?本文將通過示例來探討這些問題。

python陣列去重

source = ['a','a','b','c','d','d'] dest = [] for e in source: if e not in dest: dest.appe

Python二維陣列的建立

習慣了java的Matrix = [][]不知道python怎麼創二維陣列。 先看 python中的二維陣列操作 對最後提出的二維陣列建立方式存在疑問 Matrix = [([0] * 3) for i in range(4)] 為什麼可以用[0]*3?不會淺拷貝嗎?   看了

Python 矩陣或者陣列相減的法則

最近在做程式設計練習,發現有些結果的值與答案相差較大,通過分析比較得出結論,大概過程如下: 定義了一個計算損失的函式: def error(yhat,label): yhat = np.array(yhat) label = np.array(label) error_s

python生成隨機陣列/向量

使用numpy.random模組來生成隨機陣列轉載 1、np.random.rand 用於生成[0.0, 1.0)之間的隨機浮點數, 當沒有引數時,返回一個隨機浮點數,當有一個引數時,返回該引數長度大小的一維隨機浮點數陣列,引數建議是整數型,因為未來版本的numpy可能不支援非整形引數

劍指offer Python版 - 陣列重複的數字

題目描述 在一個長度為n的數組裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。 例如,如果輸入長度為7的陣列{2,3,1,0,2,5,3},那麼對應的輸出是第一個重複的數字2。

python陣列和矩陣

陣列和矩陣計算的區別。通過getA()可以把矩陣轉化為陣列  # from numpy import* w = ones((3, 1)) #建立陣列 weights = mat(w) #轉換為numpy矩陣 s = weights.getA()

Python找出陣列或者矩陣每行/每列個數最多的成員,及出現的次數

 在Python中,我們可以用scipy.stats.mode函式尋找陣列或者矩陣每行/每列中最常出現成員以及出現的次數 。 from scipy.stats import mode def mode(a, axis=0, nan_policy='propagate'

java,python 的list和陣列的區別

java    陣列 列表 備註 結構 線性結構 線性結構 儲存位置 記憶體中的棧區 記憶體中的堆區 儲存方式 靜態連續

python陣列隨機選擇一部分取出,並從原陣列刪除取出的內容

可以使用numpy中的random.choice函式隨機選擇陣列的下標 numpy.random.choice(a, size=None, replace=True, p=None) #a為一維陣列或int值,為一維陣列時會從該陣列中隨機選擇元素,為int

Pythonnumpy讀取高維陣列特定的行,列

直接跑程式碼,看懂程式碼,跑一遍,你自然懂了。 ''' 多維矩陣按括號的層級,從外向內,一次是第1,2,3,...維 b[]內用逗號將各維分開,分別代表第1,2,3...維元素 逗號把陣列分成兩維度,左邊是所有的行(第一維度),右邊是所有的列(第二維度元素) 每個維度上

python陣列重複的數字

# coding: utf-8 class Solution: def duplicate(self,alist): """返回陣列中重複的數字""" tmp = [] for item in alist:

Pythonnumpy 陣列的切片操作

簡介 X[n0,n1]是通過 numpy 庫引用二維陣列或矩陣中的某一段資料集的一種寫法。 類似的,X[n0,n1,n2]表示取三維陣列,取N維陣列則有N個引數,N-1個逗號分隔。 以二維陣列為例: import numpy as np X = np.arra

python資料結構容器(list、dict、tuple、set)和C++、JAVA的匯出資料型別, 陣列

list(列表):語法:列表形如 [1, 2, 3, 4] [‘小明’,‘小紅’,] ,用中括號括住,裡面是字串、布林,每一項逗號分開。 建立 宣告變數時 中括號、項,建立一個非空的列表。 num_list = [1,2,3,4] 建立一個空列表,之後再修改

Python避免在給多維陣列賦值之前判斷key是否存在的方法 • cenalulu's Tech Blog

Python在使用二維及多維陣列(dict)時,每次賦值之前都需要判斷一維及較小維度上的key是否存在。本文將介紹對於這種問題的解決方案 背景 Python中可以使用dict資料型別來實現二維及多維陣列。但是在對dict型別的多維陣列賦值時,相較其他語言需要預先額外判斷一次低維度的k