首页 文章

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

提问于
浏览
1663
items = []
items.append("apple")
items.append("orange")
items.append("banana")

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

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

6 回答

  • 5

    并且为了完整性(带有downvotes的团队一个),可以不使用 len() 函数(我不会宽恕这是一个不错的选择):

    def count(list):
      item_count = 0
      for item in list[:]:
        item_count = item_count + 1
      return item_count
    
    count([1,2,3,4,5])
    

    list[:] 中的冒号是隐式的,因此也是可选的)

  • 68

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

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

    如何获得列表的大小?

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

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

    现在:

    len(items)
    

    返回3 .

    解释

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

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

    但如果你're checking if list size is zero or not, don' t使用 len - 而不是put the list in a boolean context - it treated as False if empty, True otherwise .

    来自文档

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

    explain why here但简而言之, if itemsif not items 更具可读性和更高性能 .

  • 11

    除了len,您还可以使用operator.length_hint(需要python 3.4) . 对于普通 list ,两者都是等价的,但是 length_hint 可以获得list-iterator的长度,这在某些情况下可能很有用:

    >>> 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 根据定义只是"hint",因此大部分时间 len 更好 .

    我见过几个建议访问 __len__ 的答案 . 在处理像 list 这样的内置类时,这是正常的,但它可能会导致自定义类出现问题,因为 len (和 length_hint )会执行一些安全检查 . 例如,两者都不允许负长度或长度超过某个值( sys.maxsize 值) . 因此,使用 len 函数而不是 __len__ 方法总是更安全!

  • 171

    虽然这可能没有用,因为它更有意义,因为它具有"out of the box"属性,因此一个相当简单的黑客就是构建一个具有 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 属性的额外好处 .

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

  • 7

    以前给出的例子回答你的问题:

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

相关问题