协慌网

登录 贡献 社区

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

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

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

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

答案

len()函数可以与Python 中的许多类型一起使用 - 包括内置类型和库类型。

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

如何获得列表的大小?

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

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

现在:

len(items)

返回 3。

说明

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

特别是在 Python 中具有 “大小” 的列表和其他类似内置对象具有名为ob_size的属性,其中对象中的元素数量被缓存。因此,检查列表中的对象数量非常快。

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

来自文档

len(s)

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

len是使用__len__从数据模型docs 实现的

object.__len__(self)

被调用来实现内置函数len() 。应该返回对象的长度,整数 > = 0. 此外,一个没有定义__nonzero__() [在 Python 3 中的__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 itemsif not items更具可读性和更高性能。

虽然这可能没有用,因为它更具有 “开箱即用” 功能,但是一个相当简单的黑客就是构建一个具有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属性的额外好处。

一如既往,您的里程可能会有所不同