items = [] items.append("apple") items.append("orange") items.append("banana") # FAKE METHOD:: items.amount() # Should return 3
如何获取列表中的元素数量?
并且为了完整性(带有downvotes的团队一个),可以不使用 len() 函数(我不会宽恕这是一个不错的选择):
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[:] 中的冒号是隐式的,因此也是可选的)
list[:]
len()函数可以与Python中的许多类型一起使用 - 内置类型和库类型 .
>>> len([1,2,3]) 3
如何获得列表的大小?
要查找列表的大小,请使用内置函数 len :
len
items = [] items.append("apple") items.append("orange") items.append("banana")
现在:
len(items)
返回3 .
Python中的所有内容都是一个对象,包括列表 . 所有对象在C实现中都有某种 Headers .
特别是在Python中具有"size"的列表和其他类似内置对象具有名为 ob_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:
__len__
object.len(self)
调用实现内置函数len() . 应该返回对象的长度,整数> = 0.此外,一个没有定义__nonzero __()[在Python 3中的__bool __()在Python 3中]并且__len __()方法返回零的对象被认为是在布尔上下文中为false .
我们还可以看到 __len__ 是一种列表方法:
items.__len__()
事实上,我们看到我们可以获得所有描述类型的信息:
>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, xrange, dict, set, frozenset)) True
当然,要测试特定长度,只需测试相等性:
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 items 或 if not items 更具可读性和更高性能 .
if items
if not items
除了len,您还可以使用operator.length_hint(需要python 3.4) . 对于普通 list ,两者都是等价的,但是 length_hint 可以获得list-iterator的长度,这在某些情况下可能很有用:
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 根据定义只是"hint",因此大部分时间 len 更好 .
我见过几个建议访问 __len__ 的答案 . 在处理像 list 这样的内置类时,这是正常的,但它可能会导致自定义类出现问题,因为 len (和 length_hint )会执行一些安全检查 . 例如,两者都不允许负长度或长度超过某个值( sys.maxsize 值) . 因此,使用 len 函数而不是 __len__ 方法总是更安全!
sys.maxsize
虽然这可能没有用,因为它更有意义,因为它具有"out of the box"属性,因此一个相当简单的黑客就是构建一个具有 length 属性的类:
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 属性的额外好处 .
一如既往,您的里程可能会有所不同
以前给出的例子回答你的问题:
items = [] items.append("apple") items.append("orange") items.append("banana") print items.__len__()
6 回答
并且为了完整性(带有downvotes的团队一个),可以不使用
len()
函数(我不会宽恕这是一个不错的选择):(
list[:]
中的冒号是隐式的,因此也是可选的)len()函数可以与Python中的许多类型一起使用 - 内置类型和库类型 .
要查找列表的大小,请使用内置函数
len
:现在:
返回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__
是一种列表方法:返回3 .
内置类型你可以得到len(长度)
事实上,我们看到我们可以获得所有描述类型的信息:
不要使用len来测试空列表或非空列表
当然,要测试特定长度,只需测试相等性:
但是有一个特殊情况用于测试零长度列表或反向 . 在这种情况下,不要测试是否相等 .
另外,不要这样做:
相反,只需:
要么
我explain why here但简而言之,
if items
或if not items
更具可读性和更高性能 .除了len,您还可以使用operator.length_hint(需要python 3.4) . 对于普通
list
,两者都是等价的,但是length_hint
可以获得list-iterator的长度,这在某些情况下可能很有用:但
length_hint
根据定义只是"hint",因此大部分时间len
更好 .我见过几个建议访问
__len__
的答案 . 在处理像list
这样的内置类时,这是正常的,但它可能会导致自定义类出现问题,因为len
(和length_hint
)会执行一些安全检查 . 例如,两者都不允许负长度或长度超过某个值(sys.maxsize
值) . 因此,使用len
函数而不是__len__
方法总是更安全!虽然这可能没有用,因为它更有意义,因为它具有"out of the box"属性,因此一个相当简单的黑客就是构建一个具有
length
属性的类:您可以像这样使用它:
从本质上讲,它与列表对象完全相同,具有对OOP友好的
length
属性的额外好处 .一如既往,您的里程可能会有所不同
以前给出的例子回答你的问题: