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

时间:2013-12-11 08:47:11

标签: python list sorting python-3.x

我一直在研究这个程序一段时间,无法弄清楚如何从第二个列表中的内容对我的一个列表进行排序。对于这个程序,我有一个单词列表,我还有一个列表,列出了我打开的文件中单词的次数。我需要根据单词的频率按降序对单词列表进行排序。我必须根据作业编写一个单独的函数来执行此操作。我有一个给要使用的类的函数,但它只排序一个列表。这是我需要修改的功能:

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

4 个答案:

答案 0 :(得分:3)

你走了!使用sortedzip

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)

略有不同的版本。我相信它比第一个答案更直接,虽然更昂贵(通过制作一个新的字典)。