繁体   English   中英

"使用函数 reversed 在 Python 中反转嵌套元组"

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM