【问题标题】:match indexes and elements in a nested list匹配嵌套列表中的索引和元素
【发布时间】:2023-02-06 17:36:46
【问题描述】:

我有一个嵌套列表

elements = [['A', 'B'],['B','C'],['D','E','F']]

我有索引列表

ordered elements = ['A','B','C', 'D', 'E', 'F']

index= [308,302,303,405,506,609]

我们知道元素和索引是按顺序匹配的

我想通过索引重新创建嵌套列表,这意味着输出将如下所示:

out = [[308,302],[302,303],[405,506,609]]

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用映射字典:

    dmap = dict(zip(ordered_elements, index))
    out = [[dmap[key] for key in lst] for lst in elements]
    

    输出:

    >>> out
    [[308, 302], [302, 303], [405, 506, 609]]
    
    >>> dmap
    {'A': 308, 'B': 302, 'C': 303, 'D': 405, 'E': 506, 'F': 609}
    

    【讨论】:

      【解决方案2】:
      • 准备映射(字母到索引)
      • 迭代元素并分配给输出(使用嵌套 for/列表理解) 例如
      ordered_elements = ['A','B','C', 'D', 'E', 'F']
      
      index= [308,302,303,405,506,609]
      
      element_index_mapping = {letter:idx for e, letter in zip(ordered_elements, index)}
      
      out = []
      for letters in elements:
          indices_for_letters = []
          for letter in letters:
              indices_for_letters.append(element_index_mapping.get(letter))
          out.append(indices_for_letters)
      

      【讨论】:

        【解决方案3】:

        我不推荐这个,但如果你想要它简短,也许你可以试试这个:

        result = [[index[int(ordered_elements.index(el_l1))] for el_l1 in el] for el in elements]
        

        【讨论】:

          【解决方案4】:

          你可以这样做,尽管这里没有安全检查:

          elements = [['A', 'B'], ['B', 'C'], ['D', 'E', 'F']]
          ordered_elements = ['A', 'B', 'C', 'D', 'E', 'F']
          index = [308, 302, 303, 405, 506, 609]
          
          for sl in (out := elements[:]):
              for i, c in enumerate(sl):
                  sl[i] = index[ordered_elements.index(c)]
          
          print(out)
          

          输出:

          [[308, 302], [302, 303], [405, 506, 609]]
          

          【讨论】:

            猜你喜欢
            • 2011-01-25
            • 1970-01-01
            • 1970-01-01
            • 2023-02-04
            • 2018-12-02
            • 1970-01-01
            • 2013-01-17
            • 2016-04-19
            • 2017-04-18
            相关资源
            最近更新 更多