Общий реверс элементов списка в Python - PullRequest
4 голосов
/ 14 января 2011
>>> 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 () всегда доступен, но я надеялся избежать этого пути.

Ответы [ 2 ]

8 голосов
/ 14 января 2011
0 голосов
/ 14 января 2011

Если вам нужна глубина только один, попробуйте [x [:: - 1] для x в mylist]. В противном случае просто создайте рекурсивную функцию, например

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

Эта функция фактически конвертирует все последовательности в списки, но я надеюсь, вы понимаете суть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...