【问题标题】:Reorder array in Python based on a column基于列在Python中重新排序数组
【发布时间】:2020-08-10 13:00:36
【问题描述】:

我有一个这样的数组:

a = [[ 8, 7, 6, 5, 9],
     [1, 2, 1, 6, 4],
     [4, 2, 5, 4, 2]]`

我想根据第二行更改该数组的顺序,顺序如下: b = [2, 6, 1, 1, 4]

所以,我希望结果变成这样:

a = [[7, 5, 8, 6, 9],
     [2, 6, 1, 1, 4],
     [2, 4, 4, 5, 2]]

如何在 Python 中解决这个问题?

【问题讨论】:

    标签: python multidimensional-array reorderlist


    【解决方案1】:
    a = [[ 8, 7, 6, 5, 9],
        [1, 2, 1, 6, 4],
        [4, 2, 5, 4, 2]]
    a[1] = [2, 6, 1, 1, 4]
    

    试试看。

    【讨论】:

    • 我需要更新每一行,而不仅仅是第 2 行。
    【解决方案2】:

    在这个答案中,我做了以下两个假设:

    • 所有子列表的长度均为 5 个元素
    • 所需的逻辑是将第 2 个和第 4 个元素分别移动到第 1 个和第 2 个

    如果以上两个假设都成立,您可以使用list comprehension on a nested list,并创建一个列表来指定列表的重新排序方式。

    a = [[8, 7, 6, 5, 9],
         [1, 2, 1, 6, 4],
         [4, 2, 5, 4, 2]]
    
    new_ord = [1, 3, 0, 2, 4]
    
    b = [[l[i] for i in new_ord] for l in a]
    print(b) #prints: [[7, 5, 8, 6, 9], [2, 6, 1, 1, 4], [2, 4, 4, 5, 2]]
    

    【讨论】:

    • 感谢您的帮助。假设现在我在 b 列表上有一个不同的订单,你能帮我看看如何创建一个 new_order 列表吗?因为我在该列表中具有相同的值 (1)。
    • @kututaji 不确定你的意思。可能需要对问题进行一些澄清,或者单独提出一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2018-02-15
    • 2015-04-13
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多