【问题标题】:How would you re-order the reordered list back to its previous form?您将如何将重新排序的列表重新排序为以前的形式?
【发布时间】:2021-12-26 19:04:21
【问题描述】:
element =  ['a', 'b', 'c', 'd', 'e', 'f', 'g']
index_list =  [3,5,6,1,2,4,0]

result = [element[i] for i in index_list]
print(result)

这最终会给我一个基于索引列表的有序列表,它会给 ['d', 'f', 'g', 'b', 'c', 'e', 'a'].

你如何将这个已经重新排序的列表重新排序为以前的形式,即 ['a', 'b', 'c', 'd', 'e', 'f', 'g ']?我再次尝试使用给定的索引列表,但它没有返回,只是给了我一个新列表。有什么办法我仍然可以使用给定的索引列表重新排序列表吗?

【问题讨论】:

  • 重新订购是什么意思?原来的列表和顺序已经存储在变量element 中,新的有序列表称为result
  • 什么都没有改变。您没有更改您的 element 列表。它仍然按照原来的顺序完好无损。只需在底部添加print(element) 并重新运行。

标签: python list for-loop list-comprehension


【解决方案1】:

类似的东西

print([a for a, b in sorted(zip(result, index_list), key=lambda x: x[1])])

【讨论】:

    【解决方案2】:

    你可以处理index_list做逆排列:

    index_list =  [3,5,6,1,2,4,0]    
    reverse = [i for i, n in sorted(enumerate(index_list), key=lambda x: x[1])]
    
    original = [result[i] for i in reverse]
    

    【讨论】:

      【解决方案3】:

      你可以做相反的事情:

      reordered = [None] * len(result)
      for index, e in zip(index_list, result):
          reordered[index] = e
      

      【讨论】:

        猜你喜欢
        • 2019-02-12
        • 2019-09-18
        • 2021-12-07
        • 1970-01-01
        • 2023-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多