我有一个元组,想在 Python 中反转它。
元组看起来像这样:(2, (4, (1, (10, None))))
。
我尝试通过以下方式在 Python 中反转:
a = (2, (4, (1, (10, None))))
b = reversed(a)
它返回给我:
<reversed object at 0x02C73270>
我如何得到相反的a
?或者我必须编写一个函数来做到这一点?
结果应如下所示:
((((None, 10), 1), 4), 2)
我有一个元组,想在 Python 中反转它。
元组看起来像这样:(2, (4, (1, (10, None))))
。
我尝试通过以下方式在 Python 中反转:
a = (2, (4, (1, (10, None))))
b = reversed(a)
它返回给我:
<reversed object at 0x02C73270>
我如何得到相反的a
?或者我必须编写一个函数来做到这一点?
结果应如下所示:
((((None, 10), 1), 4), 2)
def my_reverser(x):
try:
x_ = x[::-1]
except TypeError:
return x
else:
return x if len(x) == 1 else tuple(my_reverser(e) for e in x_)
试试这个深度反向函数:
def deep_reverse(t):
return tuple(deep_reverse(x) if isinstance(x, tuple) else x
for x in reversed(t))
这将处理任意嵌套的元组,而不仅仅是两个元组。
如文档中所述,该reversed
函数返回一个迭代器(因此是<reversed at ...>
)。如果您想从中获取列表或元组,只需使用list(reversed(...))
or tuple(reversed(...))
。
但是,这只是我们问题的一部分:您将初始对象反转(2, (...))
为(...,2)
,而...
保持不变。您必须实现递归反转:如果输入元组的一个元素是可迭代的,则需要将其反转为。
reversed
对不起,这样做没有意义。但是一个简单的递归函数会返回你想要的:
def reversedLinkedTuple(t):
if t is None:
return t
a, b = t
return reversedLinkedTuple(b), a
reversed
仅可用于可逆的可迭代对象,如列表、元组等。从 Python 内置iter
.
您可以为您的链表编写一个包装类来实现这一点,然后提供一个反向迭代器,但我认为这将是矫枉过正并且不会真正满足您的需求。
def reverse(x):
while x >= 0:
print(x)
x = x = 1
reverse(x)