python - 使用列表中的值作为另一个列表的索引的最pythonic方式

标签 python list loops indexing

我有一个列表 hns = [[a,b,c],[c,b,a],[b,a,c]] 其中位置给出了特定的排名样本。即 hns[0] 运行 1 hns[1] 运行 `2 并且 hns[2] 运行 3 并且 'a' 是第一轮排名第一,第二轮排名第三,第三轮排名第二。

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

所以在 hns 中,a 位于 0,0 位置,然后是 1,2 和 2,1,在这个问题中,这意味着它的排名分别是 1 3 2,我需要最终得到一个反射(reflect)这一点的表格

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

所以现在(因为我是 python 的新手,所以我仍然陷入 for 循环思考)在我看来,我必须循环遍历 hns 并填充 hnday 当我获取索引值时,假设 'a' = 1 并更新 hnday[0][1] = 1 hnday[0][2] = 3hnday[0][3] = 2

这似乎不是一种非常 pythonic 的方法来解决这个问题,我会问我可以看看其他什么方法。

最佳答案

这是我能想到的最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/

相关文章:

python - 在 Python 中有什么方法可以追加到后面吗?

c++ - 如何执行与自身的快速合并 C++ 列表

list - 从列表中获取元素 Terraform

css - 是否可以将列表放入 span 标记中?

python: For In loops - 我不明白

python - SGD 优化器图

python - 列出文件中定义的所有函数

python - 如何阻止 fiddle 图切断异常值或极值

javascript - jQuery:通过单击删除对象会导致意外的循环

c - 如何加速我的代码?