如果我有一个函数可以同时对集合和列表进行操作,并且应该返回序列的修改形式,那么有没有一种方法可以保留序列类型,但仍然使用理解?例如,在下面的例子中,如果我用一个集合调用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
如果没有类型检查,没有通用的方法可以做到这一点。另外,对于集合,您可以使用集合理解:
{ p[prefixlen:] for p in seq }
。在没有好的方法来保存序列的类型。正如您所猜测的,如果您真的想这样做,您必须将末尾的答案转换为您想要的类型。很有可能你不需要这么做,所以你应该好好想想。在
如果您决定转换,一个可能会帮助您的快捷方式:内置序列的类型也是可以创建这些序列的构造函数:
相关问题 更多 >
编程相关推荐