【发布时间】:2015-11-20 14:31:10
【问题描述】:
获取反向列表的长度不起作用:
lst = [1,2,3]
lst = reversed(lst)
print len(lst)
抛出TypeError: object of type 'listreverseiterator' has no len()
解决方法是:
lst = [1,2,3]
lst_length = len(lst)
lst = reversed(lst)
print lst_length
# OR
lst = lst[::-1]
print len(lst)
现在我真正的问题是为什么?
简单地反转列表不会改变列表的长度,
那么为什么 Python 会抛出这个异常呢?
【问题讨论】:
-
reversed的结果是一个迭代器;要确定它的长度,你必须消耗它。 -
您可以改为检查
lst.__length_hint__()(尽管并非所有 Python 实现都保证这一点)。 -
我不明白为什么你需要使用反转来检查列表的长度,反转列表不会改变大小
-
@ajcr 从python3.4+正式添加到PEP 424。添加了
operator.length_hint函数,因此operator.length_hint(lst)应该可以工作,实际上:>>> operator.length_hint(reversed([1,2,3])) 3
标签: python list python-2.7