嗯,如果您被迫保留笨拙的数据结构,那就别指望了。与您的第一个解决方案类似的单行代码将是这样的:
def samplesof(requested_cond, conditions): return next(s for c, s in conditions if c==requested_cond)
对于第二个,如果您坚持使用单线,它将类似于:
def ordered_union(the_conds, conditions): return [s for c in the_conds for s in samplesof(c, conditions)]
有更快的方法可以解决第二个问题,但是它们都是多行的,例如:
aux_set = set(the_conds)samples_by_cond = dict((c, s) for c, s in conditions if c in aux_set)return [s for c in the_conds for s in samples_by_cond[c]]
注意,后一种方法更快的原因在于它使用了正确的数据结构(集合和字典)-不幸的是,它必须自己构建它们,因为传入的
conditions嵌套列表实际上是错误的数据结构。
您难道不能只封装
conditions一次构建关键(正确,快速)辅助数据结构的类的成员变量吗?例如:
class Sensible(object): def __init__(self, conditions): self.seq = [] self.dic = {} for c, s in conditions: self.seq.append(c) self.dic[c] = s def samplesof(self, requested_condition): return self.dic[requested_condition] def ordered_union(self, the_conds): return [s for c in the_conds for s in self.dic[c]]
现在, 这 是快速和优雅!
我假设您需要
self.seq其他条件(条件序列)(您提到的两个 *** 作肯定不需要!),并且该序列和示例中没有重复(无论您的实际规格是什么)将不会很难适应,但是当您一无所知时盲目地尝试猜测它们
将 是非常困难和毫无意义的;-)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)