[英]Reversing a nested tuple in Python using the function reversed
我有一个元组,想在 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(...))
或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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.