按索引获取元素[Python]

时间:2016-02-10 00:10:00

标签: python list indexing

我有这个练习,在不使用字典的情况下,在一些特定文章中查找特定人物的计数。

当我尝试使用索引从列表中获取元素时,我遇到了一个问题。具体想象我有3个列表:

[u'Putin', u'Fattah', u'Vladimir',u'Cameron', u'Bashar', u'al-Baghdadi']
counts : [3, 6, 1, 1, 1, 0]
results: [6, 6, 1, 1, 1, 0]
Sorted results: [6, 6, 1, 1, 1, 0]

第一个列表包含人名,第二个列表包含计数,第三个列表是应用公式后得出的,第四个列表是排序后的第三个列表。

鉴于我需要比较2或3个更高的值,并在我这样做时返回最常提到的人:

elif res[0] == res[1]:
idx = results[i].index(sorted_res[0])
idx2 = results[i].index(sorted_res[1])
print idx, results[idx]
print idx2, results[idx2]

我回来了:

1 Putin
1 Putin

而我想要回来:

1 Putin
2 Fattah

在不使用字典的情况下是否可以做到这一点?

提前谢谢。

1 个答案:

答案 0 :(得分:4)

我会把它们拉在一起,这样你就有了一个像[('Putin',3,6),('Fattah',6,6),......这样的清单。然后你可以按元组的第二个元素(结果)排序。

names = [u'Putin', u'Fattah', u'Vladimir',u'Cameron', u'Bashar', u'al-Baghdadi']
counts = [3, 6, 1, 1, 1, 0]
results = [6, 6, 1, 1, 1, 0]

all_vals = zip(names, counts, results)
in_order = sorted(all_vals, key = lambda x: x[2], reverse = True)
print in_order
print in_order[0][0] #Putin
print in_order[1][0] #Fattah

for i,e in enumerate(in_order):
     print i, e[0]

# 0 Putin
# 1 Fattah
# 2 Vladimir
# ...