使用相应的行对Python列进行排序

时间:2017-07-22 12:22:33

标签: python arrays list sorting

我想根据一行充满int:

对列值进行排序
cart = [[1, 3, 0, 2], ['olives', 'tomatoes', 'avocado', 'patato']]

并拥有此

new_cart= [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes' ]]

换句话说,我希望字符串按它们对应的整数值排序:

我发现了这些问题,但没有找到我想要的问题:

how to sort 2d array by row in python?

How to sort multidimensional array by column?

2 个答案:

答案 0 :(得分:4)

zip-sort-unzip程序应该可以解决问题:

data = [[1, 3, 0, 2], ['olives', 'tomatoes', 'avocado', 'patato']]
sorted_data = zip(*sorted(zip(data[0], data[1])))
# [(0, 1, 2, 3), ('avocado', 'olives', 'patato', 'tomatoes')]

或者如果您想将它们保留为列表:

sorted_data = map(list, zip(*sorted(zip(data[0], data[1]))))
# [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes']]

在Python 3.x上,zipmap都会返回迭代器,所以如果你想“烧掉”#39;他们只是进入了'#cast;#39;它们就是这样,即:

sorted_data = list(map(list, zip(*sorted(zip(data[0], data[1])))))

注意:正如JJoao所建议的那样,您也可以在内部zip中使用参数展开,而不是从列表中明确选择您想要zip的字段,例如:

sorted_data = list(map(list, zip(*sorted(zip(*data)))))

答案 1 :(得分:0)

sorted_data=[ sorted(i) for i in data ]
# [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes']]

这样就可以了。简单列表理解。!