我有一个元组,想在python中反转它。
元组如下所示:(2,(4,(1,(10,None))))。
我尝试通过
在python中进行反转a = (2, (4, (1, (10, None))))
b = reversed(a)
它让我回答:
<reversed object at 0x02C73270>
我如何反过来?或者我必须写一个函数来做这个吗?
结果应如下所示:
((((None, 10), 1), 4), 2)
对早期部分道歉...
答案 0 :(得分:3)
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_)
答案 1 :(得分:3)
尝试这种深度反转功能:
def deep_reverse(t):
return tuple(deep_reverse(x) if isinstance(x, tuple) else x
for x in reversed(t))
这将处理任意嵌套的元组,而不仅仅是两元组。
答案 2 :(得分:2)
正如documentation中所解释的,reversed
函数返回一个迭代器(因此<reversed at ...>
)。如果您想要获取列表或元组,请使用list(reversed(...))
或tuple(reversed(...))
。
然而,这只是我们问题的一部分:您将初始对象(2, (...))
转换为(...,2)
,而...
保持不变。您必须实现递归反向:如果输入元组的一个元素是可迭代的,则需要将其反转为。
答案 3 :(得分:1)
对reversed
执行此操作没有意义,抱歉。但是一个简单的递归函数会返回你想要的东西:
def reversedLinkedTuple(t):
if t is None:
return t
a, b = t
return reversedLinkedTuple(b), a
reversed
仅可用于可逆的可迭代对象,如列表,元组等。您正在使用的内容(链接列表)在Python内置iter
的意义上是不可迭代的。
您可以为链接列表编写一个包装类来实现它,然后提供一个反向迭代器,但我认为这样做太过分了,并不适合您的需要。