Sorting list based on values from another list?

后端 未结 15 2315
温柔的废话
温柔的废话 2020-11-21 07:14

I have a list of strings like this:

X = [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\"]
Y = [ 0,   1,   1,   0,   1,   2,   2,   0,   1 ]
         


        
15条回答
  •  孤街浪徒
    2020-11-21 08:07

    Shortest Code

    [x for _,x in sorted(zip(Y,X))]
    

    Example:

    X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
    Y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
    
    Z = [x for _,x in sorted(zip(Y,X))]
    print(Z)  # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
    

    Generally Speaking

    [x for _, x in sorted(zip(Y,X), key=lambda pair: pair[0])]
    

    Explained:

    1. zip the two lists.
    2. create a new, sorted list based on the zip using sorted().
    3. using a list comprehension extract the first elements of each pair from the sorted, zipped list.

    For more information on how to set\use the key parameter as well as the sorted function in general, take a look at this.


提交回复
热议问题