在python集合中维护类型的顺序

2024-09-28 13:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个函数可以同时对集合和列表进行操作,并且应该返回序列的修改形式,那么有没有一种方法可以保留序列类型,但仍然使用理解?例如,在下面的例子中,如果我用一个集合调用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。在

p.S.我使用的是python3.2.2


Tags: path方法函数类型列表prefixreturnos
2条回答

如果没有类型检查,没有通用的方法可以做到这一点。另外,对于集合,您可以使用集合理解:{ p[prefixlen:] for p in seq }。在

没有好的方法来保存序列的类型。正如您所猜测的,如果您真的想这样做,您必须将末尾的答案转换为您想要的类型。很有可能你不需要这么做,所以你应该好好想想。在

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

def strip_common_path_prefix(seq):
    # blah blah
    return prefix, type(seq)(result)

相关问题 更多 >

    热门问题