繁体   English   中英

访问嵌套列表中元素的最快方法是什么?

[英]What is the fastest way to access elements in a nested list?

我有一个由三层组成的列表,出于说明目的,看起来像这样:

a = [[['1'],['2'],['3'],['']],[['5'],['21','33']]]

因此,我有一个顶层列表,其中包含其他几个列表,每个列表又包含一个列表。

第一层将包含在数十个列表中。 下一层可能包含数百万个列表,而下一层将包含空字符串,单个字符串或少数几个值(每个字符串)。

现在,我需要访问最底层的值并将它们以特定顺序存储在新列表中,并在循环内完成。 访问这些值的最快方法是什么? 内存的使用量并不是我最关心的(尽管我显然也不想浪费它)。

我可以想到两种方式:

  1. 我直接访问列表a以检索所需的值,例如a[1][1][0]将返回'21'
  2. 我创建的元素的副本a ,然后访问这些拼合列表多一点。 因此,在这种情况下,例如: b=a[0]c=a[1]因此,我现在不访问a[1][1][0]而是访问b[1][0]以检索'21'

访问嵌套列表是否会影响性能? 因此,有没有在分割清单可以得到的好处a成单独列出还是我只是承担在这样一个RAM处罚?

通过元素的索引(即a [1] [1] [0])访问元素是O(1)操作: source 您不会比这快得多。

现在,赋值也是O(1)运算,因此就速度而言,您所描述的两种方法之间没有区别。 第二个实际上不会引起任何内存问题,因为对列表的分配是通过引用而不是复制进行的(除非您明确地告诉它否则执行此操作)。

假定b=a[0]仅将另一个名称绑定到该索引处的列表,则这两种方法大致相同。 它不会复制列表。 就是说,唯一的区别是,在第二种方法中,唯一的区别是,除了访问嵌套列表之外,您最终还会抛出引用。 因此,从理论上讲,它有点慢。

正如@joaquinlpereyra指出的那样,Python Wiki列出了此类操作的复杂性: https ://wiki.python.org/moin/TimeComplexity

因此,答案很短:只需访问列表项,速度就更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM