栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python关联列表中有效查找元素

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python关联列表中有效查找元素

嗯,如果您被迫保留笨拙的数据结构,那就别指望了。与您的第一个解决方案类似的单行代码将是这样的:

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
其他条件(条件序列)(您提到的两个操作肯定不需要!),并且该序列和示例中没有重复(无论您的实际规格是什么)将不会很难适应,但是当您一无所知时盲目地尝试猜测它们
是非常困难和毫无意义的;-)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号