文章目录
案例说明
分享一个拍平二维数组的案例。
有如下二维数组,包含两个元素。现在需要输出为一维数组,能想到哪些方法呢?
# 二维数组
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]]
'''