2010-03-08 131 views
11

len(list)是否每次调用列表计算列表的长度,还是返回内置计数器的值?
我有一个背景下,我需要通过一个循环,每次检查列表的长度,如:在python中,len(list)是做什么的?

listData = [] 
for value in ioread(): 
    if len(listData)>=25: 
     processlistdata() 
     clearlistdata() 
    listData.append(value) 

我应该检查len(listData)在每个迭代上,或者我应该有一个列表的长度计数器?

+4

我对99.9%的肯定表示,任何高级语言的序列类型都会存储它的长度。 Python,Perl和Ruby(以及其他类似的语言)中的'len'(或'strlen'或'length')函数决不会花费O(N)时间。 – 2010-03-08 07:21:02

+0

我想用'for grouped in grouper替换你的代码(ioread(),25):process(chunk)'其中'grouper()'的定义类似于http://docs.python.org/library/itertools。 html#食谱(你可能想用'izip()'替换'izip_longest()'来删除最后一个值)。 – jfs 2010-03-08 09:23:23

+0

您是否测量了两个版本以查看哪一个更快?使用'timeit'更容易,并发布结果,以便我们对它们发表评论。 – 2010-03-08 11:08:36

回答

16

如果您担心此操作的性能,那么您应该知道,该列表在Python中为are really动态数组。也就是说,它们并没有作为链接列表来实现,你通常必须“走”来计算长度(除非存储在标题中)。

由于他们已经需要存储“簿记”信息来处理内存分配,因此也会存储长度。

1
Help on built-in function len in module __builtin__: 

len(...) 
    len(object) -> integer 

    Return the number of items of a sequence or mapping. 

所以是的,len(list)返回列表中有多少项。您可能想要更详细地描述,提供必要的输入文件/输出以帮助更好地理解您想要执行的操作。

+8

OP担心这个长度是否会在每次询问时重新计算。 – 2010-03-08 07:21:40

+0

我认为这也取决于ioread()所做的。 – ghostdog74 2010-03-08 07:24:55

0

len(list)返回列表的长度。如果你改变它,你必须在每次迭代时检查它的长度。或者使用一个计数器。

0

len(list)返回列表的长度。每次你调用它时,它都会返回列表的长度。您可以设置一个计数器,通过最初获取列表的len值,然后在每次将某项内容添加到列表中时向变量加1。

相关问题