如何在Python中获取列表的元素数量(列表长度)?

2267 投票
11 回答
3833484 浏览
提问于 2025-04-15 15:53

我怎么才能知道列表 items 中有多少个元素呢?

items = ["apple", "orange", "banana"]

# There are 3 items.

11 个回答

79

虽然这可能不是特别有用,因为它本来应该是“开箱即用”的功能,但有一个相对简单的办法,就是创建一个带有 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]

基本上,它和列表对象是完全一样的,只是多了一个适合面向对象编程的 length 属性。

不过,具体效果可能因人而异。

307

如何获取列表的长度?

要找出列表中有多少个元素,可以使用内置的函数 len

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

现在:

len(items)

返回的是 3。

解释

在 Python 中,所有东西都是对象,包括列表。所有对象在 C 语言的实现中都有某种头部信息。

特别是,列表和其他类似的内置对象都有一个叫做 ob_size 的属性,用来缓存对象中的元素数量。所以检查列表中的元素数量是非常快的。

但是,如果你想检查列表的大小是否为零,不要使用 len - 而是把列表放在布尔上下文中 - 如果列表为空,它会被视为 False,非空则为 True

来自 文档

len(s)

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

len 是通过 __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, 
                                            range, 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 比其他方法更易读且性能更好。

2939

len()这个函数在Python中可以用来处理多种不同类型的数据,包括内置类型和库中的类型。举个例子:

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

撰写回答