【问题标题】:How to rearrange nested list based on particular index如何根据特定索引重新排列嵌套列表
【发布时间】:2018-04-15 08:03:25
【问题描述】:

我有一个嵌套列表如下:

nli=[[123,12],[124,15],[127,19],[12,6]]

我想根据另一个列表li重新排列上面的嵌套列表:

li=[15,6,12,19]

其中li值对应于嵌套列表nli的第二个元素那么我如何根据li的顺序重新排列nli,其中实习生对应于每个嵌套列表的第二个元素nli 重新排列nli后的输出假设为:

[[124, 15], [12, 6], [123, 12], [127, 19]]

我也想知道我在哪里可以了解更多关于这类操作的信息 提前致谢!!

【问题讨论】:

    标签: python python-2.7 list nested-lists


    【解决方案1】:

    您可以先创建一个dict,将元素的值映射到它在列表中出现的顺序li

    >>> order = {k: i for i, k in enumerate(li)}
    >>> order
    {19: 3, 12: 2, 6: 1, 15: 0}
    

    然后使用 order 根据每个 [1] 元素对原始列表进行排序。

    >>> sorted(nli, key = lambda i: order[i[1]])
    [[124, 15], [12, 6], [123, 12], [127, 19]]
    

    【讨论】:

    • 这应该是最有效的解决方案。
    【解决方案2】:

    可以使用nli的每个值中最后一个元素的索引值进行排序:

    nli=[[123,12],[124,15],[127,19],[12,6]]
    li=[15,6,12,19]
    new_list = sorted(nli, key=lambda x:li.index(x[-1]))
    

    输出:

    [[124, 15], [12, 6], [123, 12], [127, 19]]
    

    【讨论】:

      【解决方案3】:

      首先按想要的键映射(创建索引):

      by_second_item = {item[1]: item for item in nli}
      

      现在使用映射创建新列表:

      rearranged = [by_second_item[i] for i in li]
      # or: list(map(by_second_item.get, li))
      

      【讨论】:

        【解决方案4】:
        [j for i in li for j in nli if j[1]==i]
        #Output
        #[[124, 15], [12, 6], [123, 12], [127, 19]]
        

        【讨论】:

          猜你喜欢
          • 2018-07-12
          • 1970-01-01
          • 2017-05-23
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 2014-11-29
          • 2012-10-15
          • 1970-01-01
          相关资源
          最近更新 更多