2013-12-11 159 views
3

我一直在研究這個程序一段時間,並不知道如何從第二個列表中的內容中排序我的列表之一。對於這個程序,我有一個單詞列表,我也有一個單詞列表,我打開的文件中有多少個單詞。我需要根據單詞的頻率按降序對單詞列表進行排序。我必須編寫一個單獨的函數來根據賦值完成此操作。我有一個給班級使用的功能,但它只排序一個列表。這裏是我已經和需要修改的功能:Python從另一個列表中排序一個列表

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的頻率「中」,1爲「頻率貓「等。

我的目標是有MYLIST排序是這樣的:

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

我應該如何修改函數我有它使用從頻率列表中的相應值排序mylist

我正在使用Python 3.3

+0

以2個列表開始。無論何時交換,請記住交換兩個列表中的相同位置。此外,pythonic方法將壓縮列表,將其與其中一個元素進行排序,並將其他項目作爲結果。 – SuperSaiyan

回答

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'] 

希望這有助於!

+0

一行。 Touché – yuvi

+1

雖然正確,但OP想要修改他的代碼,而不是完全替換它。檢查我的評論下面的問題。 – SuperSaiyan

+0

@Thrustmaster * /嘆*。你是對的,但是讓它自己做起來比修復別人要容易得多。哈哈哈。請稍等片刻 – aIKid

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值它了值。

1
zip(*sorted(zip(frequency, mylist))[::-1])[1] 
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) 

一個稍微不同的版本。我相信它比第一個答案更直接,但更昂貴(通過製作一個新的字典)。