获取反向列表的长度

tae*_*esu 9 python list python-2.7

获取反向列表的长度不起作用:

lst = [1,2,3]
lst = reversed(lst)
print len(lst)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

现在我真正的问题是为什么
简单地反转列表不会改变列表的长度,
那么为什么Python会抛出该异常呢?

小智 14

函数reversed()返回迭代器,而不是实际列表.你不能直接得到迭代器的len()(见这里).您可以使用Extended Slice语法反转列表:

lst_reversed = lst[::-1]
Run Code Online (Sandbox Code Playgroud)

或者将列表反转到位:

lst.reverse()
Run Code Online (Sandbox Code Playgroud)

如果必须使用迭代器,可以先将其转换为列表:

lst_reversed = list(reversed(lst))
Run Code Online (Sandbox Code Playgroud)

通过这些方法中的每一种,len()将按预期工作.

  • 呼叫列表违背了使用反向的目的 (3认同)