<p>好吧,如果你被迫保留那些笨重的数据结构,你就不能期望太多。第一个解决方案的一行代码相当于:</p>
<pre><code>def samplesof(requested_cond, conditions):
return next(s for c, s in conditions if c==requested_cond)
</code></pre>
<p>对于第二个问题,如果你坚持一句话,它会是这样的:</p>
^{pr2}$
<p>有更快的方法来解决第二个问题,但都是多行的,例如:</p>
<pre><code>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]]
</code></pre>
<p>请注意,后一种方法之所以更快,关键在于它使用了正确的数据结构(set和dict)——不幸的是,它必须自己构建它们,因为传入的{<cd1>}嵌套列表实际上是错误的数据结构。在</p>
<p>您不能将<code>conditions</code>封装为一个类的成员变量,该类只构建一次关键的(正确的,快速的)辅助数据结构?E、 g.:</p>
<pre><code>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]]
</code></pre>
<p>现在<em>那</em>又快又优雅!在</p>
<p>我假设您需要<code>self.seq</code>(条件序列)来执行其他操作(对于您提到的两个操作,它肯定不需要!),并且在这个序列和样本中没有重复(无论你的实际规格是什么,它们都不会很难接受,但是当你没有提到它们的时候,盲目地去猜测它们是非常困难和毫无意义的;-)。在</p>