如何获取列表中的元素数量?

考虑如下: html

items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD:
items.amount()  # Should return 3

如何获取列表items的元素数? python


#1楼

虽然因为“开箱即用”功能在乎义上更有意义,因此这可能没有用,可是一个至关简单的技巧是用length属性构建一个类: 缓存

class slist(list):
    @property
    def length(self):
        return len(self)

您能够这样使用它: 安全

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

本质上,它与列表对象彻底相同,其附加好处是具备友好的OOP length属性。 app

和往常同样,您的里程可能会有所不一样。 函数


#2楼

len()函数可与Python中的几种不一样类型一块儿使用-内置类型和库类型。 例如: 性能

>>> len([1,2,3])
3

官方2.x文档在这里: len()
正式的3.x文档在这里: len() 测试


#3楼

如何得到列表的大小?

要查找列表的大小,请使用内置函数lenui

items = []
items.append("apple")
items.append("orange")
items.append("banana")

如今: spa

len(items)

返回3。

说明

Python中的全部内容都是一个对象,包括列表。 在C实现中,全部对象都有某种头。

列表和其余相似的内置对象在Python中具备“大小”,尤为是具备一个名为ob_size的属性,其中缓存了对象中元素的数量。 所以,检查列表中对象的数量很是快。

可是,若是您要检查列表大小是否为零,请不要使用len而是将列表放在布尔值上下文中-若是为空,则将其视为False,不然将其视为True

来自文档

len(s)

返回对象的长度(项目数)。 参数能够是序列(例如字符串,字节,元组,列表或范围)或集合(例如字典,集合或冻结集合)。

len是经过数据模型docs中的 __len__实现的:

object.__len__(self)

调用以实现内置函数len() 。 应该返回对象的长度,即> = 0的整数。此外,考虑未定义__nonzero__() [在Python 2中为__bool__()在Python 3中]且其__len__()方法返回零的对象。在布尔上下文中为false。

咱们还能够看到__len__是列表的方法:

items.__len__()

返回3。

内建类型能够获得len (长度)

实际上,咱们看到咱们能够为全部描述的类型获取此信息:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

请勿使用len测试空列表或非空列表

固然,要测试特定长度,只需测试是否相等:

if len(items) == required_length:
    ...

可是在测试零长度列表或反数列表时有一种特殊状况。 在这种状况下,请勿测试是否相等。

另外,请勿执行如下操做:

if len(items): 
    ...

相反,只需执行如下操做:

if items:     # Then we have some items, not empty!
    ...

要么

if not items: # Then we have an empty list!
    ...

在这里解释缘由,但简而言之,不管是if items仍是if not items都更具可读性和性能。


#4楼

经过前面给出的示例来回答您的问题:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

#5楼

除了len以外,您还可使用operator.length_hint (须要Python 3.4+)。 对于普通list二者都是等效的,可是length_hint使得能够获取列表迭代器的长度,这在某些状况下可能颇有用:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

可是length_hint从定义上来讲只是一个“提示”,所以在大多数状况下len更好。

我已经看到一些建议访问__len__答案。 在处理诸如list类的内置类时,这是能够的,可是因为len (和length_hint )实现了一些安全检查,所以可能致使自定义类出现问题。 例如,二者都不容许负长度或超过某个值( sys.maxsize值)的长度。 所以,使用len函数而不是__len__方法老是更安全!

相关文章
相关标签/搜索