list - 如何获取python中列表中元素的数目?

135 1

items = []


items.append("apple")


items.append("orange")


items.append("banana")



# FAKE METHOD:


items.amount() # Should return 3



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

时间: 原作者:

99 2

len()函数可以与Python中的几种不同类型一起使用 - 包括类型和库类型。例如:


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


3



Official 2.x文档在这里:len()
官方3.x文档在这里: len()

原作者:
102 0

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]



原作者:
137 2

除了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__ ,在withclasses处理withclasses时这是可以的,但是它可能会导致自定义类出现问题,因为len (还有length_hint )会执行一些安全检查,例如,两者都不允许负长度或长度超过某个值(sys.maxsize值),因此,使用len函数代替__len__方法总是比较安全的!

原作者:
93 5

items = []


items.append("apple")


items.append("orange")


items.append("banana")



print items.__len__()



原作者:
116 2

而且,出于完整性考虑,不使用len()函数(我不认为这是一个不错的选择,不要在python中这样做)是可能的:


def count(list):


 item_count = 0


 for item in list[:]:


 item_count += 1


 return item_count



count([1,2,3,4,5])



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

对于新程序员来说,这里的教训是: 不能在某一点上对列表中的项数进行数字计算,计算时,最好在添加项目时跟踪项目的数量,见Naftuli Kay的回答。

原作者:
122 3

len()的实际工作,这是它的C实现 :


static PyObject *


builtin_len(PyObject *module, PyObject *obj)


/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/


{


 Py_ssize_t res;



 res = PyObject_Size(obj);


 if (res < 0) {


 assert(PyErr_Occurred());


 return NULL;


 }


 return PyLong_FromSsize_t(res);


}



Py_ssize_t是对象可以有的最大长度,PyObject_Size()是返回对象大小的函数,如果无法确定对象的大小则返回1 在这种情况下,将执行此代码块:


if (res < 0) {


 assert(PyErr_Occurred());


 return NULL;


 }



结果会引发一个异常,否则,将执行此代码块:


return PyLong_FromSsize_t(res);



res是一个C整数,它被转换为python long,并且返回,因为python 3所有python整数都存储为longs.

原作者:
...