Поддержание типа последовательности в понимании набора или списка в python - PullRequest
2 голосов
/ 16 октября 2011

Если у меня есть функция, которая может работать как с наборами, так и со списками и должна возвращать измененную форму последовательности, есть ли способ сохранить тип последовательности, но при этом использовать понимание?Например, в следующем случае, если я вызываю stripcommonpathprefix с набором, он работает, но имеет нежелательный побочный эффект преобразования набора в список.Можно ли поддерживать тип (хотя все еще используя понимание) без необходимости непосредственно проверять isinstance и затем возвращать правильный тип, основанный на этом?Если нет, то какой самый чистый способ сделать это?

def commonpathprefix(seq):

    return os.path.commonprefix(seq).rpartition(os.path.sep)[0] + os.path.sep


def stripcommonpathprefix(seq):

    prefix = commonpathprefix(seq)
    prefixlen = len(prefix)
    return prefix, [ p[prefixlen:] for p in seq ]

Спасибо и извините, если это основной вопрос.Я только начинаю изучать Python.

PS Я использую Python 3.2.2

Ответы [ 2 ]

5 голосов
/ 16 октября 2011

Нет хорошего способа сохранить тип последовательности.Как вы уже догадались, если вы действительно хотите это сделать, вам придется преобразовать ответ в конце в нужный вам тип.Вполне вероятно, что вам не нужно этого делать, поэтому вам следует подумать об этом.

Один ярлык, который может помочь вам, если вы решите преобразовать: типы встроенных последовательностей такжеконструкторы, которые могут создавать эти последовательности:

def strip_common_path_prefix(seq):
    # blah blah
    return prefix, type(seq)(result)
0 голосов
/ 16 октября 2011

Нет обычного способа сделать это без проверки типа.Также для наборов вы можете использовать понимание набора: { p[prefixlen:] for p in seq }.

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