考慮如下: html
items = [] items.append("apple") items.append("orange") items.append("banana") # FAKE METHOD: items.amount() # Should return 3
如何獲取列表items
的元素數? python
雖然因爲「開箱即用」功能在乎義上更有意義,因此這可能沒有用,可是一個至關簡單的技巧是用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
屬性。 app
和往常同樣,您的里程可能會有所不一樣。 函數
len()
函數可與Python中的幾種不一樣類型一塊兒使用-內置類型和庫類型。 例如: 性能
>>> len([1,2,3]) 3
官方2.x文檔在這裏: len()
正式的3.x文檔在這裏: len()
測試
如何得到列表的大小?
要查找列表的大小,請使用內置函數len
: ui
items = [] items.append("apple") items.append("orange") items.append("banana")
如今: spa
len(items)
返回3。
Python中的全部內容都是一個對象,包括列表。 在C實現中,全部對象都有某種頭。
列表和其餘相似的內置對象在Python中具備「大小」,尤爲是具備一個名爲ob_size
的屬性,其中緩存了對象中元素的數量。 所以,檢查列表中對象的數量很是快。
可是,若是您要檢查列表大小是否爲零,請不要使用len
而是將列表放在布爾值上下文中-若是爲空,則將其視爲False,不然將其視爲True 。
len(s)
返回對象的長度(項目數)。 參數能夠是序列(例如字符串,字節,元組,列表或範圍)或集合(例如字典,集合或凍結集合)。
len
是經過數據模型docs中的 __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, 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 items
仍是if not items
都更具可讀性和性能。
經過前面給出的示例來回答您的問題:
items = [] items.append("apple") items.append("orange") items.append("banana") print items.__len__()
除了len
以外,您還可使用operator.length_hint
(須要Python 3.4+)。 對於普通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
從定義上來講只是一個「提示」,所以在大多數狀況下len
更好。
我已經看到一些建議訪問__len__
答案。 在處理諸如list
類的內置類時,這是能夠的,可是因爲len
(和length_hint
)實現了一些安全檢查,所以可能致使自定義類出現問題。 例如,二者都不容許負長度或超過某個值( sys.maxsize
值)的長度。 所以,使用len
函數而不是__len__
方法老是更安全!