我有一个列表hns = [[a,b,c],[c,b,a],[b,a,c]],其中的位置给出了特定样本中的排名。例如,运行hns[0] 1 hns[1]运行'2,并且hns [2]运行3,并且'a'在运行1中排名1,在运行2中排名3,在运行3中排名2。

和另一个列表hnday = [[a,1,2,3],[b,1,2,3],[c,1,2,3]]

所以在hns中a处于0,0位置,然后是1,2和2,1,在这个问题上意味着它的排名分别是1 3 2,我需要得出一张表来反映这一点

hnday = [[a,1,3,2],[b,2,2,1],[c,3,1,3]]


所以现在(由于我是python的新手,因为我仍然陷入循环思维之中)在我看来,我必须遍历hns并填充hnday,因为我要使用的索引值为'a '= 1并更新hnday[0][1] = 1
hnday[0][2] = 3hnday[0][3] = 2

这似乎不是一种非常有效的方法,我想问一下我还能考虑什么其他方法。

最佳答案

这是我能想到的最pythonic和最漂亮的方式:

>>> hns=[['a','b','c'],['c','b','a'],['b','a','c']]

>>> keys = ['a','b','c']

>>> hnday = [[k]+[hns[i].index(k)+1 for i in range(len(hns))] for k in keys]
[['a', 1, 3, 2], ['b', 2, 2, 1], ['c', 3, 1, 3]]


但是,字典似乎不适合最后一个表达式吗?
使用字典,您可以轻松地使用hnday[key]访问键的排名,而无需迭代hnday

它在理解表达式中的变化不大:

>>> hnday = {k:[hns[i].index(k)+1 for i in range(len(hns))] for k in keys}
{'c': [3, 1, 3], 'b': [2, 2, 1], 'a': [1, 3, 2]}

>>> hnday['a']
[1, 3, 2]
>>> hnday['b']
[2, 2, 1]
>>> hnday['c']
[3, 1, 3]

关于python - 将列表中的值用作另一个列表的索引的最pythonic方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31081532/

10-12 20:30