文章目錄
案例說明
分享一個拍平二維數組的案例。
有如下二維數組,包含兩個元素。現在需要輸出爲一維數組,能想到哪些方法呢?
# 二維數組
ar1 = [[1, 2, 3], [4, 5]]
1、最平凡:數組索引訪問
print(ar1[0]+ar1[1])
# [1, 2, 3, 4, 5]
2、最傷腦:二次遍歷-列表生成器
newlist = [i for j in range(len(ar1)) for i in ar1[j]]
print(newlist)
3、最靈巧:活用函數sum()
使用sum(), 將源數組和空的一維數組作爲參數傳入,最終得到的結果是一維數組。
newlist = sum(ar1, [])
print(newlist)
爲什麼sum()還可以這樣玩?
翻閱平凡的官方文檔對sum()的定義,發現裏邊有隱藏的點,只能深入理解和反覆實踐,纔可挖掘、領悟。
def sum(iterable: Iterable[_T], start: _S)
Return the sum of a ‘start’ value (default: 0) plus an iterable of
numbers
When the iterable is empty, return the start value. This function is
intended specifically for use with numeric values and may reject
non-numeric types.*
4、最省心:一步到位,Numpy.flatmap()
import numpy as np
a = np.array([[1,2], [3,4]])
print(a.flatten())# 賦值操作時不會改變源數組 的值
print(a.flatten('F'))# 豎直方向
print(a.ravel())# 賦值操作時會改變源數組的值
注意, flatten()與 ravel()的區別
flatten():不會改變源數組
ravel():會改變源數組
看如下示例
a = np.array([[1,2], [3,4]])
a.flatten()[1]=11
'''
[[1 2]
[3 4]]
'''
print(a)
a.ravel()[1]=10
print(a)
'''
發現源對象的值已被更改爲10
[[ 1 10]
[ 3 4]]
'''