在Python中合并两个列表

时间:2014-01-13 23:38:59

标签: python list

嗨,对于我所在大学的一个项目,我希望获得我从网站上获得的前n个元素。

我设法用beautifulsoup获得元素的评级和标题。 现在我有两个列表:一个带有标题,一个带有评级。 它们看起来像这样: 评分

  [4.4, 3.5, 5.0 , 1.5]

标题

  ['Title1','Title2','Title3','Title4']

排名顺序与标题顺序一致。 如何合并这两个列表以获得前n个评级元素?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果你知道它们总是一样长,你可以这样做:

for i in range(0,len(numberList)):
    newList.append(titleList[i],numberList[i])

然后会给你一个新的列表:

[('Title1',4.4),('Title2',3.5)]

然后您可以随意排序和使用。