【问题标题】:Find the nearest value of a list element查找列表元素的最近值
【发布时间】:2017-06-02 12:53:08
【问题描述】:

我有两个列表:

>>> list1 = ['gain','archive','win','success']
>>> list2 = ['i','win','game','i','am','success','cool']

而且我通过比较列表发现两个列表的值相同。

>>> result= set(list1) & set(list2)

输出是

set(['win', 'success'])

现在我想找到result下一个 元素值。这里是:'game''cool'

我该怎么做(使用 python 2.7)?

【问题讨论】:

    标签: python list element intersection


    【解决方案1】:

    鉴于你有交集词

    result = { 'win', 'success' }
    

    您可以像这样在list2 中找到下一个词:

    next_words = [list2[list2.index(word)+1] for word in result]
    

    index 获取列表中给定元素的索引。可以加 1 得到下一个元素。

    如果你的元素位于列表的end,它会抛出异常,因为没有“下一个”元素可以获取。

    【讨论】:

    • 很好,当没有“下一个”元素时如何避免抛出异常。
    • 取决于你想在那种情况下发生什么。你没有指定。
    【解决方案2】:

    您可以使用 index 函数并添加 1。但请注意,如果您的公共元素是列表的最后一个,则会产生错误

    list1 = ['gain','archive','win','success']
    list2 = ['i','win','game','i','am','success','cool']
    result= set(list1) & set(list2)
    
    list3 = [list2[list2.index(e)+1] for e in result]
    

    edit 对于最后一个元素是公共元素的情况:

    result= set(list1) & set(list2)
    list4 = []
    for e in result:
        try:
            list4.append(list2[list2.index(e)+1])
        except:
            pass
    

    输出:['game', 'cool']

    【讨论】:

      【解决方案3】:

      您可以对 list2 进行成对迭代并手动执行“交集”:

      list1 = ['gain','archive','win','success']
      list2 = ['i','win','game','i','am','success','cool']
      
      set1 = set(list1)
      
      result = []
      for item, nextitem in zip(list2, list2[1:]):  # pairwise iteration
          if item in set1:
              result.append(nextitem)   # append the next item if the current item is in the intersection
      
      print(result)  # ['game', 'cool']
      

      【讨论】:

        【解决方案4】:

        这可以解决 list2 中的下一个元素:

        next_result = [list2[list2.index(el)+1] for el in result if list2.index(el)+1<len(list2)]
        

        【讨论】:

          【解决方案5】:

          您可以使用list2.index,但这只是为了找回索引而进行的完整搜索,并且人为地将复杂性从O(n) 增加到O(n*n)

          只需跟踪每个单词的索引。有几种方法可以做到这一点。

          • 创建您自己的函数来搜索常用词,并将它们作为 list2 中这些词的索引返回。这可能是 Pythonic 最少但速度最快的。

          • list2的单词到它们的索引创建一个字典,然后在计算集合交集后,在字典上查找索引并加一。您需要构建一个 list2 大小的完整字典,这可能很昂贵(但仍然比O(n*n) 好)。

          • list2 的单词到它们的下一个单词或None(如果没有的话)创建一个字典,并在字典上查找以找到索引。您需要构建一个 list2 大小的完整字典,这可能很昂贵。

          • 1234563索引。

          【讨论】:

            猜你喜欢
            • 2017-12-06
            • 2016-11-23
            • 2014-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 2015-07-26
            • 1970-01-01
            相关资源
            最近更新 更多