我一直在研究这个程序一段时间,无法弄清楚如何从第二个列表中的内容对我的一个列表进行排序。对于这个程序,我有一个单词列表,我还有一个列表,列出了我打开的文件中单词的次数。我需要根据单词的频率按降序对单词列表进行排序。我必须根据作业编写一个单独的函数来执行此操作。我有一个给要使用的类的函数,但它只排序一个列表。这是我需要修改的功能:
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
我目前有两个列表如下:
mylist = ["the", "cat", "hat", "frog"]
frequency = [4, 1, 2 ,1]
4是“the”的频率,1是“cat”的频率,依此类推。
我的目标是让mylist按如下方式排序:
mylist = ["the", "hat", "cat", "frog"]
我应该如何修改我的功能,以便使用频率列表中的相应值对mylist
进行排序?
我正在使用Python 3.3
答案 0 :(得分:3)
你走了!使用sorted
和zip
:
sortedlist = [i[0] for i in sorted(zip(mylist, frequency), key=lambda l: l[1], reverse=True)]
这是一个小小的演示:
>>> 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)
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
您只需将频率列表合并到函数中,并将其值与mylist值进行比较,并将其值与mylist值进行交换。
答案 2 :(得分:1)
zip(*sorted(zip(frequency, mylist))[::-1])[1]
答案 3 :(得分:1)
mylist = ["the", "cat", "hat", "frog"]
frequency = [4, 1, 2 ,1]
adict = dict(zip(mylist, frequency))
sorted(mylist, key = lambda x:adict[x], reverse = True)
略有不同的版本。我相信它比第一个答案更直接,虽然更昂贵(通过制作一个新的字典)。