排序2列表相互链接

Rob*_*dra 5 python sorting list python-3.x

我坚持一个问题,我想不出任何有效的方法来做到这一点.问题如下:

我有2个列表,每个列表n最多10^3.

v = [v_1, v_2, ..., v_n]
w = [w_1, w_2, ..., w_n]
Run Code Online (Sandbox Code Playgroud)

在以下示例中n = 3.

v = [60, 100 , 120] 
w = [20, 50, 30]
Run Code Online (Sandbox Code Playgroud)

我需要根据以下等式的递减顺序对两个列表进行排序: v_i/w_i

所以在这种情况下我会得到:

v_1/w_1 = 3
v_2/w_2 = 2
v_3/w_3 = 4
Run Code Online (Sandbox Code Playgroud)

之后,我需要按降序排序两个列表(相互依赖),我会得到以下结果.

v_new = [120, 60, 100]
w_new = [30, 20, 50]
Run Code Online (Sandbox Code Playgroud)

我知道有一种排序方式(zip(X,Y),但这样做会改变我的列表中的元组,我需要它作为列表.任何建议?

Bi *_*ico 5

Python的排序函数可以使用键,您可以使用lambda函数来定义要排序的键.在这种情况下,我建议对索引进行排序,然后将订单应用于vw.例如:

v = [60, 100 , 120] 
w = [20, 50, 30]
order = sorted(range(len(v)), key=lambda i: v[i] / w[i], reverse=True)

v_new = [v[i] for i in order]
w_new = [w[i] for i in order]
Run Code Online (Sandbox Code Playgroud)

  • @RobertKodra我觉得你误解了我的答案.`v`和`w`永远不会排序.我们发现排序需要对`v_i/w_i`进行排序,然后使用该排序创建新列表. (2认同)