对reverse()函数的误解?

时间:2014-01-02 05:58:49

标签: python

对于python来说,我相当新;但是,我读了一些书,我正在研究每个内置的功能,方法和模块。我遇到过函数:reversed()。我知道参数'seq'处理迭代并且iter()对象必须支持颠倒()方法。对我来说,从逻辑上讲,这可行:

x=[1,2,3,4]
it=iter(x)
reversed('it')
"""returns the statement "<reversed object at 0x02738730>" """
it.__next__()
1

对不起,如果这个问题出现愚蠢,假设我误解了revers()函数。

我的问题:此功能对iter对象的行为究竟如何?

4 个答案:

答案 0 :(得分:8)

你有一些问题。首先,你颠倒了字符串'it',而不是你的迭代器对象。如果要反转对象it,则需要执行reversed(it)

但是,由于reverse不适用于广义迭代器,因此仍然无效。正如您所注意到的,要反转的对象必须提供__reversed__方法 - 迭代器通常不会 - 或者是序列。 (那么为了回答你的问题“这个函数究竟与它的对象有什么关系?”,答案是“它对一般的迭代不起作用;它们必须是”特殊的“迭代,它们知道如何反转它们。)

您还需要使用结果。 reversed不会就地反转迭代器(这甚至是不可能的);它返回一个反向的 new 迭代器。因此,假设it作为可以反转的对象,您需要执行rev = reversed(it),然后迭代rev以查看相反的项目。

答案 1 :(得分:1)

reversed()函数返回颠倒列表上的迭代器。它不会反转列表本身。 另外,你在字符串'it'上调用函数而不是你调用它的迭代器,但我相信你现在已经解决了这个问题。

答案 2 :(得分:1)

>>> x=[1,2,3,4]
>>> it=iter(x)
>>> ti=reversed('it')
>>> print ti.next()
t
>>> ti=reversed(x)
>>> print ti.next()
4
>>> print ti.next()
3
>>> print ti.next()
2
>>> print ti.next()
1
>>> print it.next()
1
>>> print it.next()
2
>>> ti=reversed(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument to reversed() must be a sequence

因此,reversed返回一个迭代器对象,该对象将序列作为参数,并从结束而不是从开始迭代。因此,反向将不适用于迭代器,因为示例中的参数'it'是一个字符串,它将起作用但不会像您期望的那样。

答案 3 :(得分:0)

我猜你想要这样的东西,虽然今天我的水晶球可能有雾:

#!/usr/local/cpython-3.3/bin/python

x = [1,2,3,4]
x.reverse()
#it = iter(x)
#reversed('it')
for element in x:
    print(element)

我们正在进行逆转,然后使用for循环进行迭代。