**:
因為經常寫for所以感覺有點low而且執行效率不高,慢慢學習改進,這個矩陣操作例子還不錯可以學學。
用python實現矩陣的加法運算和乘法運算,寫幾層for迴圈,實現矩陣加法和乘法並不困難,但關鍵是要足夠簡潔,這個可讓我費了不少腦子。先直接上**吧。
#矩陣表示形式
m = [
[a1, a2, a3],
[a4, a5, a6],
[a7, a8, a9]
]
#矩陣加法
def madd(m1, m2):
if isinstance(m1, (tuple, list)) and isinstance(m2, (tuple, list)):
return [[m+n for m,n in zip(i,j)] for i, j in zip(m1,m2)]
#矩陣乘法
def multi(m1, m2):
if isinstance(m1, (float, int)) and isinstance(m2, (tuple, list)):
return [[m1*i for i in j] for j in m2]
if isinstance(m1, (tuple, list)) and isinstance(m2, (tuple, list)):
return [[sum(map(lambda x: x[0]*x[1], zip(i,j)))
for j in zip(*m2)] for i in m1]
加法和乘法實現都只用了一行**就搞定了,注意,均沒有做嚴格的輸入引數合法性檢查。乘法處理了常數乘矩陣和矩陣乘矩陣兩種情況。
幾個替代for迴圈的關鍵字:
map
(funcname, list)
python的map 函式使得函式能直接以list的每個元素作為引數傳遞到funcname中, 並返回響應的新的list
如下:
def s
q(x):
return
x*x#求x的平方
map(sq, [1,3, 5,7,9]) #[1, 9, 25, 49, 81]
在需要對list中的每個元素做轉換的時候, 會很方便
比如,把list中的每個int 轉換成str
map(str, [23,43,4545,324]) #['23', '43', '4545', '324']
當然, 第二個引數是list
, 也可以是tuple
或者是set
類list結構的, dict 是不行的,不過返回的結果都是list
map(sq, (1,3, 5,7,9)) # tuple [1, 9, 25, 49, 81]
map(sq, set([1,3, 5,3,7,9])) # set [1, 9, 81, 25, 49]
這裡順便說一下, dict的結構是用{}
表示的,如
是直觀的key-value形式, 那麼如果{}
中的是乙個類list的結構呢, 如:
其實, 這就是set的最終返回形式, 等價於:
那麼, 自然{}
有重複值得時候也會去重
#
reduce
(funcname, list)
與map相比 , reduce類似於乙個聚合類的應用方法, 把list中的引數, 依次傳遞給funcname, 每次funcname的引數都是上個funcname 執行結果和下乙個list中的元素, 所以, funcname 的 引數必須是兩個. 從執行過程看, 有點像遞迴
例如: 求range(1, 101)
(不包括101)的和,
def
c_sum
(x, y)
: return x + y;
reduce(c_sum, range(1,101)) #5050
filter
(funcname, list)
執行過程依次將list中的元素傳遞到funcname函式中, 根據funcname返回的true或false 保留或丟棄元素
例: 返回某個list
中的所有int
資料
def
is_int
(x):
if isinstance(x, (int)):
return
true
else:
return
false
filter(is_int, ["yi",2, "3", 4]) #[2, 4]
sorted
( list, [comp_func])
排序方法, 第二個是可選引數, 根據可選引數返回的值, 對結果進行排序,comp_func
接受兩個引數(x, y), 最終返回的結果應該是-1.0,1
, 如果返回的是-1
, 表示xy
, 所以, 實際的排序可以自定義
預設是正序排序:
sorted([3,4, 12, 5, 9, 1]) #[1, 3, 4, 5, 9, 12]
如果是需要倒序排列, 自定義方法:
def
m_order
(x, y):
if(x > y):
return
-1elif(x == y):
return
0else:
return
1sorted([3,4, 12, 5, 9, 1], m_order) #[12, 9, 5, 4, 3, 1]
ps: 以上為學習筆記, 如有錯誤, 還望指正 python爬蟲小例子
如下 r.raise for status 的功能是判斷返回的狀態碼,如果狀態碼不是200 如404 則丟擲異常 來檢視user agent屬性。requests庫寫的 預設user agent是 python requests x.xx.x x表示版本號 如果訪問不成功,可嘗試修改 user ag...
Python演算法小例子
累加求和 1 num以內的累計和 可以使用 for迴圈,while迴圈,遞迴 num int input 請輸入num的值 defsum 1 for迴圈 sum 0for x in range num 1 sum x print sum def sum 2 num 遞迴方法 if num 0 ret...
python小例子(三)
1.提高python執行速度的方法 1 使用生成器,節約大量記憶體 2 迴圈 優化,避免過多重複 的執行 3 核心模組使用cpython,pypy等 4 多程序,多執行緒,協程 5 多個if elif判斷,可以把最可能發生的放在前面 2.mysql和redis的區別?redis 記憶體型菲關聯式資料...