Python从另一个列表中排序一个列表

Python sort one list from another list

本问题已经有最佳答案,请猛点这里访问。

我已经在这个程序上工作了一段时间了,还不知道如何从第二个列表的内容中对我的列表进行排序。对于这个程序,我有一个单词列表,我也有一个列表,列出了这个单词在我打开的文件中的次数。我需要根据单词的频率按降序对单词表进行排序。我必须写一个独立的函数来根据任务来完成这项工作。我有一个给类使用的函数,但它只对一个列表排序。以下是我拥有的和需要修改的功能:

1
2
3
4
5
6
7
8
9
def selectionsort(mylist):
    for i in range(len(mylist)):
       max_i = i
       for j in range( i + 1, len(mylist) ):
           if mylist[j] > mylist[max_i]:
                max_i = j
       temp = mylist[max_i]
       mylist[max_i] = mylist[i]
       mylist[i] = temp

我目前有两个列表,如下所示:

1
2
mylist = ["the","cat","hat","frog"]
frequency = [4, 1, 2 ,1]

4是"的频率",1是"cat"的频率等等。

我的目标是让我的列表按如下方式排序:

1
 mylist = ["the","hat","cat","frog"]

我应该如何修改我拥有的函数,以便它使用频率列表中的相应值对mylist进行排序?

我使用的是python 3.3


干得好!使用sortedzip时:

1
sortedlist = [i[0] for i in sorted(zip(mylist, frequency), key=lambda l: l[1], reverse=True)]

下面是一个小演示:

1
2
3
4
5
6
>>> mylist
['the', 'cat', 'hat', 'frog']
>>> frequency = [4, 1, 3, 2]
>>> sortedlist = [i[0] for i in sorted(zip(mylist, frequency), key=lambda l: l[1], reverse=True)]
>>> sortedlist
['the', 'hat', 'frog', 'cat']

希望这有帮助!


1
2
3
4
5
6
7
8
9
10
11
12
def selectionsort(mylist, frequences):
    for i in range(len(mylist)):
       max_i = i
       for j in range( i + 1, len(mylist) ):
           if frequences[j] > frequences[max_i]:
                max_i = j
       temp = mylist[max_i]
       mylist[max_i] = mylist[i]
       mylist[i] = temp
       temp = frequences[max_i]
       frequences[max_i] = frequences[i]
       frequences[i] = temp

您只需将frequences列表合并到函数中,并比较其值而不是mylist值,然后将其值与mylist值交换。


1
2
3
4
mylist = ["the","cat","hat","frog"]
frequency = [4, 1, 2 ,1]
adict = dict(zip(mylist, frequency))
sorted(mylist, key = lambda x:adict[x], reverse = True)

稍有不同的版本。我相信这比第一个答案更直接,虽然更昂贵(通过做一个新的口述)。


1
zip(*sorted(zip(frequency, mylist))[::-1])[1]