1

我有一个元组,想在 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)
4

5 回答 5

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_)
于 2012-09-24T11:45:22.280 回答
3

试试这个深度反向函数:

def deep_reverse(t):
    return tuple(deep_reverse(x) if isinstance(x, tuple) else x 
                 for x in reversed(t))

这将处理任意嵌套的元组,而不仅仅是两个元组。

于 2012-09-24T11:46:56.337 回答
2

文档中所述,该reversed函数返回一个迭代器(因此是<reversed at ...>)。如果您想从中获取列表或元组,只需使用list(reversed(...))or tuple(reversed(...))

但是,这只是我们问题的一部分:您将初始对象反转(2, (...))(...,2),而...保持不变。您必须实现递归反转:如果输入元组的一个元素是可迭代的,则需要将其反转为。

于 2012-09-24T11:39:21.187 回答
1

reversed对不起,这样做没有意义。但是一个简单的递归函数会返回你想要的:

def reversedLinkedTuple(t):
  if t is None:
    return t
  a, b = t
  return reversedLinkedTuple(b), a

reversed仅可用于可逆的可迭代对象,如列表、元组等。从 Python 内置iter.

您可以为您的链表编写一个包装类来实现这一点,然后提供一个反向迭代器,但我认为这将是矫枉过正并且不会真正满足您的需求。

于 2012-09-24T11:42:44.343 回答
0
def reverse(x):
    while x >= 0:
        print(x)

x = x = 1
reverse(x)
于 2022-01-14T09:45:11.733 回答