![](/img/trans.png)
[英]what is the fastest way to exclude the elements of a list from another lis in python?
[英]What is the fastest way to access elements in a nested list?
我有一个由三层组成的列表,出于说明目的,看起来像这样:
a = [[['1'],['2'],['3'],['']],[['5'],['21','33']]]
因此,我有一个顶层列表,其中包含其他几个列表,每个列表又包含一个列表。
第一层将包含在数十个列表中。 下一层可能包含数百万个列表,而下一层将包含空字符串,单个字符串或少数几个值(每个字符串)。
现在,我需要访问最底层的值并将它们以特定顺序存储在新列表中,并在循环内完成。 访问这些值的最快方法是什么? 内存的使用量并不是我最关心的(尽管我显然也不想浪费它)。
我可以想到两种方式:
a
以检索所需的值,例如a[1][1][0]
将返回'21'
。 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.