如何獲取列表中的元素數量?

考慮如下: html

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

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

如何獲取列表items的元素數? python


#1樓

雖然因爲「開箱即用」功能在乎義上更有意義,因此這可能沒有用,可是一個至關簡單的技巧是用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

和往常同樣,您的里程可能會有所不一樣。 函數


#2樓

len()函數可與Python中的幾種不一樣類型一塊兒使用-內置類型和庫類型。 例如: 性能

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

官方2.x文檔在這裏: len()
正式的3.x文檔在這裏: len() 測試


#3樓

如何得到列表的大小?

要查找列表的大小,請使用內置函數lenui

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都更具可讀性和性能。


#4樓

經過前面給出的示例來回答您的問題:

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

print items.__len__()

#5樓

除了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__方法老是更安全!

相關文章
相關標籤/搜索