簡體   English   中英

根據另一個列表對列表進行排序

[英]Sort list based on another list

我在python3.6中有兩個列表,我想通過考慮d值對w進行排序。 這類似於這個問題, 基於另一個列表中的值對列表進行排序? ,但是,我無法使用zip因為wd不是成對數據。

我有一個代碼示例,並且想要獲取t變量。

更新

我可以通過使用for循環來做到這一點。 有沒有更快的方法?

import numpy as np

w = np.arange(0.0, 1.0, 0.1)
t = np.zeros(10)
d = np.array([3.1, 0.2, 5.3, 2.2, 4.9, 6.1, 7.7, 8.1, 1.3, 9.4])
ind = np.argsort(d)
print('w', w)
print('d', d)

for i in range(10):
    t[ind[i]] = w[i]

print('t', t)
#w [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
#d [ 3.1  0.2  5.3  2.2  4.9  6.1  7.7  8.1  1.3  9.4]
#ht [ 0.3  0.   0.5  0.2  0.4  0.6  0.7  0.8  0.1  0.9]

像這樣使用argsort

>>> t = np.empty_like(w)
>>> t[d.argsort()] = w
>>> t
array([0.3, 0. , 0.5, 0.2, 0.4, 0.6, 0.7, 0.8, 0.1, 0.9])

它們成對的數據,但方向相反。

  • 列出第三個列表i ,np.arange(0,10)。
  • d zip
  • d作為排序鍵對元組進行排序; i仍然擁有每個d元素的原始索引。
  • w zip它。
  • i作為排序鍵對三元組(好吧,一對成對作為一個元素)進行排序。
  • 提取新值中的w值; 這是你的t數組。

這個問題的答案很棒,但是我要謹慎地指出您沒有按照自己的想法去做。

您想做什么:( 或至少是我收集的)您想讓t包含以d的排序順序重新排列的w的值

你在做什么:填寫t中的排序順序d ,用的元素w 您僅在更改t填充方式的順序。 您沒有將d反映為w on t

考慮一下for循環中的一個小變化

for i in range(0,10):
    t[i] = w[ind[i]]

這輸出一個t

('t', array([0.1, 0.8, 0.3, 0. , 0.4, 0.2, 0.5, 0.6, 0.7, 0.9]))

您也可以調整PaulPanzer的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM