嗨,我在大學的一個項目中,我想獲得從網站獲得的前n個評分要素。在Python中合併兩個列表
我設法得到與美麗的元素的評分和標題。 現在我有兩個名單:一個與標題和一個評級。 他們看起來像這樣: 評級
[4.4, 3.5, 5.0 , 1.5]
標題
['Title1','Title2','Title3','Title4']
的排名順序是內嵌的標題順序。 我該如何合併這兩個列表才能獲得前n個評分要素?
嗨,我在大學的一個項目中,我想獲得從網站獲得的前n個評分要素。在Python中合併兩個列表
我設法得到與美麗的元素的評分和標題。 現在我有兩個名單:一個與標題和一個評級。 他們看起來像這樣: 評級
[4.4, 3.5, 5.0 , 1.5]
標題
['Title1','Title2','Title3','Title4']
的排名順序是內嵌的標題順序。 我該如何合併這兩個列表才能獲得前n個評分要素?
lst1 = [4.4, 3.5, 5.0 , 1.5]
lst2 = ['Title1','Title2','Title3','Title4']
zipped = list(zip(lst1, lst2)) # "merges" the lists
zipped.sort(key=lambda x: x[0], reverse=True) # sorts by ratings, descending
print(zipped)
輸出:
[(5.0, 'Title3'), (4.4, 'Title1'), (3.5, 'Title2'), (1.5, 'Title4')]
現在,你可以切片輸出(zipped
)你的心臟的內容,以獲得您想要的頂級然而,很多頭銜。如果,例如,你想上2個元素(但只有標題,沒有收視率):
n = 2
result = [item[1] for item in zipped[:n]]
print(result)
輸出:
['Title3', 'Title1']
>>> ratings = [4.4, 3.5, 5.0 , 1.5]
>>> titles = ['Title1','Title2','Title3','Title4']
>>> sorted(list(enumerate(titles)), key=lambda t:ratings[t[0]])
[(3, 'Title4'), (1, 'Title2'), (0, 'Title1'), (2, 'Title3')]
>>> [t[1] for t in sorted(list(enumerate(titles)), key=lambda t:ratings[t[0]])]
['Title4', 'Title2', 'Title1', 'Title3']
如果你知道他們總是相同的長度你可以做這樣的事情:
for i in range(0,len(numberList)):
newList.append(titleList[i],numberList[i])
然後會給你一個新的列表是這樣的:
[('Title1',4.4),('Title2',3.5)]
那你可以隨心所欲地分類和使用。
這裏最好使用列表理解。 – kevinsa5
>>> import heapq
>>> A = [4.4, 3.5, 5.0 , 1.5]
>>> B = ['Title1','Title2','Title3','Title4']
>>> heapq.nlargest(2, zip(A, B))
[(5.0, 'Title3'), (4.4, 'Title1')]
+1正確回答OP的問題,雖然我認爲'zip'和一個列表comp來獲得標題可能會更清楚一點! –
@adsmith:我同意。我看到了'zip'解決方案,併發布了這個解決方案,只是爲了提供另一種解決方法 – inspectorG4dget