我有一组清单如下:
conditions = [
["condition1", ["sample1", "sample2", "sample3"]],
["condition2", ["sample4", "sample5", "sample6"],
...]
如何在Python中高效优雅地完成以下任务?在
找到某个条件下的所有元素?在
把条件2中所有的样品都拿出来。现在我可以:
^{pr2}$但那太笨重了。
找到条件列表的有序联合?E、 g.ordered_union(["condition1", "condition2"], conditions)
应返回:
["sample1", "sample2", "sample3", "sample4", "sample5", "sample6"]
如何在Python中有效地实现这一点?可能有聪明的一句话?在
您需要使用
dict
(字典),而不是list
。另外,如果您想要高效的基于集合的操作,可以将样本保存在set
中。在这看起来更像是
dict
的工作:然后可以使用
^{pr2}$在Python3.1或2.7中,可以使用
OrderedDict
来保留顺序:然后,您可以得到“有序联合”,同样适用于任意大小的
OrderedDicts
:好吧,如果你被迫保留那些笨重的数据结构,你就不能期望太多。第一个解决方案的一行代码相当于:
对于第二个问题,如果你坚持一句话,它会是这样的:
^{pr2}$有更快的方法来解决第二个问题,但都是多行的,例如:
请注意,后一种方法之所以更快,关键在于它使用了正确的数据结构(set和dict)——不幸的是,它必须自己构建它们,因为传入的{}嵌套列表实际上是错误的数据结构。在
您不能将
conditions
封装为一个类的成员变量,该类只构建一次关键的(正确的,快速的)辅助数据结构?E、 g.:现在那又快又优雅!在
我假设您需要
self.seq
(条件序列)来执行其他操作(对于您提到的两个操作,它肯定不需要!),并且在这个序列和样本中没有重复(无论你的实际规格是什么,它们都不会很难接受,但是当你没有提到它们的时候,盲目地去猜测它们是非常困难和毫无意义的;-)。在相关问题 更多 >
编程相关推荐