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

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

# There are 3 items.

当前回答

len()函数可以用于Python中的几种不同类型——内置类型和库类型。例如:

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

其他回答

除了len之外,您还可以使用operator.length_hint(需要Python 3.4+)。对于普通列表,两者都是等效的,但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__方法总是更安全!

要获取任何顺序对象中的元素数,Python中的goto方法是len()。

a = range(1000) # range
b = 'abcdefghijklmnopqrstuvwxyz' # string
c = [10, 20, 30] # List
d = (30, 40, 50, 60, 70) # tuple
e = {11, 21, 31, 41} # set

len()方法可以处理所有上述数据类型,因为它们是可迭代的,即您可以对它们进行迭代。

all_var = [a, b, c, d, e] # All variables are stored to a list
for var in all_var:
    print(len(var))

len()方法的粗略估计

def len(iterable, /):
    total = 0
    for i in iterable:
        total += 1
    return total

您可以使用len()函数来查找python中可迭代项的长度。

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # OUTPUT: 5

len()函数还可以处理字符串:

my_string = "hello"
print(len(my_string))  # OUTPUT: 5

最后,len()可用于任何序列或集合(或定义__len__的任何大小的对象)。

按照前面给出的示例回答您的问题:

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

print items.__len__()

如何获取列表的长度?

要查找列表中的元素数,请使用内置函数len:

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

现在:

len(items)

返回3。

解释

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

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

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

从文档中

长度

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

len是用__len__实现的,来自数据模型文档:

对象__len__(自己)

调用以实现内置函数len()。应该返回对象的长度,一个大于等于0的整数。此外定义__nonzero_()[在Python 2中或__bool_()在Python 3中]方法,其__len__()方法返回零在布尔上下文中被认为是假的。

我们还可以看到__len__是一种列表方法:

items.__len__()

返回3。

内置类型,可以获得长度

事实上,我们可以看到所有描述类型的信息:

>>> 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!
    ...

or

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

我在这里解释了为什么,但简而言之,if项或if项都更可读,更具性能。