java里如何取元素个数_如何获取列表中的元素数量?

考虑以下:

items = []

items.append("apple")

items.append("orange")

items.append("banana")

# FAKE METHOD:

items.amount() # Should return 3

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

#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属性。

和往常一样,您的里程可能会有所不同。

#2楼

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

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

3

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

正式的3.x文档在这里: len()

#3楼

如何获得列表的大小?

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

items = []

items.append("apple")

items.append("orange")

items.append("banana")

现在:

len(items)

返回3。

说明

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

列表和其他类似的内置对象在Python中具有“大小”,尤其是具有一个名为ob_size的属性,其中缓存了对象中元素的数量。 因此,检查列表中对象的数量非常快。

来自文档

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值