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

用相应的行对Python列进行排序,python,arrays,list,sorting,Python,Arrays,List,Sorting,我想根据充满int的行对列值进行排序: cart = [[1, 3, 0, 2], ['olives', 'tomatoes', 'avocado', 'patato']] 还有这个 new_cart= [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes' ]] 换句话说,我希望字符串按其对应的整数值排序: 我发现了这些问题,但没有一个是我想要的: zip排序解压过程应该可以实现以下功能: data = [[1, 3, 0, 2

我想根据充满int的行对列值进行排序:

cart = [[1, 3, 0, 2], ['olives', 'tomatoes', 'avocado', 'patato']]
还有这个

new_cart= [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes' ]]
换句话说,我希望字符串按其对应的整数值排序:

我发现了这些问题,但没有一个是我想要的:


zip排序解压过程应该可以实现以下功能:

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']]
在Python3.x上,
zip
map
都返回迭代器,因此如果您想将迭代器“烘焙”到列表中,只需将其“强制转换”,即:

sorted_data = list(map(list, zip(*sorted(zip(data[0], data[1])))))
注意:正如JJoao所建议的,您也可以在内部
zip
中使用参数扩展,而不是从列表中显式选择要
zip
的字段,例如:

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

这样就行了。简单的列表理解

第二个子列表的顺序规则是什么?看起来是按字母顺序排列的。你只是想按递增的顺序排序吗?没有整数或整数。让我改变它。你也在对内部列表排序吗。。。亲爱的?我编辑过,正如你们所看到的,根据第一个整数列表,我也想对字符串进行排序,正如你们所看到的,就我理解你们的问题而言,你们想对它进行排序:a=np.array([[1,3,0],'olives','tomatos','avocado']])a.sort()为什么我不能打印它?这是output@RonnieJamesDio-因为您使用的是Python3.x,它的
map
返回一个迭代器。我会更新答案。@RonnieJamesDio如果您看到的解决方案使用了
zip
,您可能一直都有答案。检查上的文档。此外,解决方案的第二部分显示了如何以列表结束。您正在查看的映射对象是一个迭代器。我需要得到一个列表。@JJoao-fair point,我想保留literal,以便用户知道它首先排序在哪个字段上。我再加一张便条。
sorted_data=[ sorted(i) for i in data ]
# [[0, 1, 2, 3], ['avocado', 'olives', 'patato', 'tomatoes']]