代码之家  ›  专栏  ›  技术社区  ›  jef

基于其他列表对列表排序

  •  1
  • jef  · 技术社区  · 6 年前

    我在python3.6中有两个列表,我想排序 w 通过考虑 d 价值观。这与这个问题类似, Sorting list based on values from another list? 但是,我不能用 zip 因为 W D 不是成对数据。

    我有一个代码示例,希望 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]
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   Paul Panzer    6 年前

    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])
    
        2
  •  1
  •   Prune    6 年前

    • 列第三个清单, i
    • zip d
    • D 元素。
    • w
    • W t
        3
  •  1
  •   Srini    6 年前

    你想要的 t w d

    填写 按排序顺序 ,元素为 .你只是在改变 被填满了。你没有反映出 D 进入之内 W 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]))
    

    你也可以把保尔潘泽的回答改编成这样。