Python 根据另一个列表值对列表的索引值进行排序

Python 根据另一个列表值对列表的索引值进行排序,python,list,sorting,Python,List,Sorting,我想根据另一个列表的值对一个列表的索引进行排序。我的代码是: x = ['mango','orange','butter','milk','coconut','tree','sky','moon','dog','cat','ant','pop','fog'] // sort this list y = ['1','10','11','12','13','2','3','4','5','6','7','8','9'] 我正在做的是: >>> x.sort(key=l

我想根据另一个列表的值对一个列表的索引进行排序。我的代码是:

  x = ['mango','orange','butter','milk','coconut','tree','sky','moon','dog','cat','ant','pop','fog'] // sort this list
  y = ['1','10','11','12','13','2','3','4','5','6','7','8','9']
我正在做的是:

  >>> x.sort(key=lambda (a,b): y.index(a))
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 1, in <lambda>
      ValueError: too many values to unpack

尝试将索引和项目放在一起,排序并分离:

y = [int(index) for index in y]  # need to sort numerically, not alphabetically
x = [item for index, item in sorted(zip(y, x))]

这是正确排序的,因为元组是按第一个键(即索引)排序的,然后将项的正确顺序提取为这种排序的副产品。

我想你的猫走火了

>>> new = [x[int(index) - 1] for index in y]
>>> new
['mango', 'cat', 'ant', 'pop', 'fog', 'orange', 'butter', 'milk', 'coconut', 'tree', 'sky', 'moon', 'dog']

.. 这真的是你想要的结果吗?我觉得你想要的结果不对。尝试:
zip(*排序(zip(x,y),key=lambda z:int(z[1]))[0]
是的,这是我想要的结果,
y
代表x-1的索引号。那么为什么x
的第一个单词不是橙色的呢?正如你所知,
mango
在索引0,而
ant
在索引10,都是0-offset@user227666好啊我看你的问题解决了。请注意,python列表从索引0开始,这就是为什么我要从
y
中的值中减去1。我不理解这个输出。根据第二个列表,
“cat”
位于索引6,为什么它列在第二位?哦,那么
y
不应该按数字顺序排序?我当时误解了OP的意图。@Cyber
'cat'
位于
x
的索引
9
,因此它是
x
的第十个元素
y
应该告诉您,在所需的输出中,x的第十个元素位于位置2。在这种情况下,我将删除我的答案。我回答的问题与你问的不同。
>>> new = [x[int(index) - 1] for index in y]
>>> new
['mango', 'cat', 'ant', 'pop', 'fog', 'orange', 'butter', 'milk', 'coconut', 'tree', 'sky', 'moon', 'dog']