在python中维护集合或列表理解中的序列类型

tjm*_*tjm 2 python list-comprehension list set python-3.x

如果我有一个可以对两个集合和列表进行操作的函数并且应该返回序列的修改形式,是否有办法保留序列类型但仍然使用理解?例如,在下面,如果我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 ]
Run Code Online (Sandbox Code Playgroud)

谢谢,对不起,如果这是一个基本问题.我刚开始学习python.

PS我正在使用Python 3.2.2

Ned*_*der 5

没有好的方法来保留序列的类型.正如您所猜测的,如果您真的想要这样做,您必须将最后的答案转换为您想要的类型.很可能你不需要这样做,所以你应该认真思考它.

如果您决定转换,可能会帮助您的一个快捷方式:内置序列的类型也是可以创建这些序列的构造函数:

def strip_common_path_prefix(seq):
    # blah blah
    return prefix, type(seq)(result)
Run Code Online (Sandbox Code Playgroud)