4
>>> b=[('spam',0), ('eggs',1)]
>>> [reversed(x) for x in b]
[<reversed object at 0x7fbf07de7090>, <reversed object at 0x7fbf07de70d0>]

残念。逆タプルのリストを取得することを期待していました!

確かに私はできる:

>>> [tuple(reversed(x)) for x in b]
[(0, 'spam'), (1, 'eggs')]

しかし、私は何か一般的なものを望んでいましたか?タプルのリストを渡された場合は逆タプルのリストを返し、リストのリストを渡された場合は逆リストのリストを返します。

確かに、isinstance()を使用した醜いハックはいつでも利用できますが、私はそのルートを避けたいと思っていました。

4

2 に答える 2

8

拡張スライス

[x[::-1] for x in b]
于 2011-01-13T21:39:57.490 に答える
0

深さが1つだけ必要な場合は、[mylistのxに対してx[::-1]]を試してください。それ以外の場合は、次のような再帰関数を作成します

import collections
def recursive_reversed(seq):
    if isinstance(seq, collections.Sequence):
        return [recursive_reversed(x) for x in reversed(seq)]
    return seq

その関数は実際にはすべてのシーケンスをリストに変換しますが、要点は理解できたと思います。

于 2011-01-13T21:46:39.030 に答える