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 deep_reverse(t):
    return tuple(deep_reverse(x) if isinstance(x, tuple) else x 
                 for x in reversed(t))

これは、2 タプルだけでなく、任意にネストされたタプルを処理します。

于 2012-09-24T11:46:56.337 に答える
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 に答える
2

ドキュメントで説明されているように、reversed関数はイテレータを返します (したがって<reversed at ...>)。リストまたはタプルを取得したい場合は、list(reversed(...))orを使用してtuple(reversed(...))ください。

ただし、これは私たちの問題の一部にすぎません。最初のオブジェクト(2, (...))を として反転させますが(...,2)...は同じままです。再帰的なリバースを実装する必要があります。入力タプルの 1 つの要素が iterable である場合は、それをリバースする必要があります。

于 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 に答える