在 Python 中,使用列表列表与使用字典相比是否有任何优点/缺点,更具体地说是在使用它们进行数值运算时?我正在编写一类函数来解决我的线性代数类的简单矩阵运算。我正在使用字典,但后来我看到它numpy
使用列表列表,所以我想它一定有一些优势。
示例:[[1,2,3],[4,5,6],[7,8,9]]
相对于{0:[1,2,3],1:[4,5,6],2:[7,8,9]}
在 Python 中,使用列表列表与使用字典相比是否有任何优点/缺点,更具体地说是在使用它们进行数值运算时?我正在编写一类函数来解决我的线性代数类的简单矩阵运算。我正在使用字典,但后来我看到它numpy
使用列表列表,所以我想它一定有一些优势。
示例:[[1,2,3],[4,5,6],[7,8,9]]
相对于{0:[1,2,3],1:[4,5,6],2:[7,8,9]}
当字典的键是0
, 1
, ..., 时n
, alist
会更快,因为不涉及散列。只要键不是这样的顺序,您就需要使用dict
.
我认为这在很大程度上取决于您计划如何使用这种结构。
Python 的字典(和大多数字典一样)默认是无序的。如果您打算像这样迭代您的数据,则不应使用字典:
for list in dict.keys():
for elem in list:
# Logic
同样,使用带有键 1、2、3 ... 的字典也没有多大意义,因为它们除了索引之外没有什么价值。由于散列过程,字典也占用了更多的内存空间。
如果您计划按元素访问项目(听起来像您想要的那样),您仍然需要使用列表。在 O(1) 的列表中查找索引,与在字典中相同。唯一的区别是当您查找某个键值而不是索引时(这将比在字典中更快)。
当您有某种键值关系映射时,您真的应该只考虑使用字典,其中需要搜索有意义的键以检索相关值。这听起来不像是其中一种情况。坚持使用列表列表。
这并不是说字典是一种糟糕的数据结构。Ruby 和 Python 向我介绍了它们,它们对于上述任何映射问题都非常有用(我发现我遇到了很多)。它们仅对特定类别的问题有用,而这不是其中之一。