我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文话题继续说基于pythonndarray类型和list类型的差异,总体上来说,两者是差不多的。但是,有一些重要的差异之处的,两者的表现差异性极强。

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - ndarray-vs-list
python教程,如何理解ndarray和list使用时的异同之处?(图6-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,本文以上一篇ndarray的出人意料之处为出发点,描述ndarraylist类型的一些重要差异点。本文测试环境:win10python@3.11.0numpy@1.24.2pandas@1.5.3

前文提示

本文的正确理解,需要您查看以下两篇文章:

ndarray之所以会给苏南大叔造成重大的意外,就是因为上文所说的两个对成员进行设置的地方。那么,本文也是基于上述的意外点展开阐述的。

初始值对后续值的影响不同

初始值的内存容量对后续值有重大影响的是ndarraylist类型没有影响!差异明显!
测试代码:

import numpy as np

s1 = [["苏", "南", "大", "叔"], ["北", "京", "大", "学"]]
s2 = np.array(s1)

s1[0:2][0][2]= "豪豪豪"
s2[0:2][0][2]= "豪豪豪"

print(s1)
print(s2)

输出:

[['苏', '南', '豪豪豪', '叔'], ['北', '京', '大', '学']]
[['苏' '南' '豪' '叔']
 ['北' '京' '大' '学']]

对于ndarray来说,初始成员的长度最大值,限制了后续被修改的成员的长度最大值。

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - 内存容量限制
python教程,如何理解ndarray和list使用时的异同之处?(图6-2)

对一组数据设置的结果不同

对一组或几组数据进行设置的时候,ndarray是改变所有的成员变量,而list是整体替换这几组数据。差异明显!
测试代码:

import numpy as np
s1 = [["苏", "南", "大", "叔"], ["北", "京", "大", "学"]]
s2 = np.array(s1)

s1[0:1] = "叔"
s2[0:1] = "叔"

print(s1)
print(s2)

输出:

['叔', ['北', '京', '大', '学']]
[['叔' '叔' '叔' '叔']
 ['北' '京' '大' '学']]

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - 对一组数据进行设置
python教程,如何理解ndarray和list使用时的异同之处?(图6-3)

import numpy as np
s1 = [["苏", "南", "大", "叔"], ["北", "京", "大", "学"]]
s2 = np.array(s1)

s1[:] = "叔"
s2[:] = "叔"

print(s1)
print(s2)

输出:

['叔']
[['叔' '叔' '叔' '叔']
 ['叔' '叔' '叔' '叔']]

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - 对一组数据进行设置2
python教程,如何理解ndarray和list使用时的异同之处?(图6-4)

输出不同

这个print的输出结果,两者也有很大不同。

  • list是用逗号隔开的,[]之间没有换行。
  • ndarray是用空格隔开的,[]之间,多一层多个换行。
  • pycharm可以对ndarray可视化,确不支持对list类型的可视化。

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - 数据可视化
python教程,如何理解ndarray和list使用时的异同之处?(图6-5)

整体直接运算

这里以乘法运算为例,

  • list是直接成员数量加倍。
  • ndarray是数字类型数字翻倍,字符类型直接出错。
import numpy as np

s1 = [1,2]
s2 = np.array(s1)
print(s1*2)      # [1, 2, 1, 2]
print(s2*2)      # [2 4]

s1 = [[1,2]]
s2 = np.array(s1)
print(s1*2)      # [[1, 2], [1, 2]]
print(s2*2)      # [[2 4]]

另外一个例子:

import numpy as np

s1 = [[1,2], ["北", "京"]]
s2 = np.array(s1)
print(s1*2)      # [[1, 2], ['北', '京'], [1, 2], ['北', '京']]
print(s2*2)      # numpy.core._exceptions.UFuncTypeError: ufunc 'multiply' did not

对字符串型的ndarray,做乘方运算的时候,报错如下:

Traceback (most recent call last):
  File "C:\Users\sunan\Desktop\demo\py\t.py", line 15, in <module>
    print(s2*2)
numpy.core._exceptions.UFuncTypeError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U11')) -> dtype('<U11')

苏南大叔:python教程,如何理解ndarray和list使用时的异同之处? - 直接运算
python教程,如何理解ndarray和list使用时的异同之处?(图6-6)

结束语

没有啥话可说,存在即为合理,既然两者是不同的数据类型,必然有其差异之处!目前看到的差异是这些,不排除将来再继续进行补充!都是苏南大叔自己总结的内容,不妥之处欢迎留言指正。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python