对于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对象的行为究竟如何?
答案 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循环进行迭代。