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