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"] |
我应该如何修改我拥有的函数,以便它使用频率列表中的相应值对
我使用的是python 3.3
干得好!使用
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] |
。