大多数pythonic方法使用列表中的值作为另一个列表的索引

时间:2015-06-26 20:22:59

标签: python list loops indexing

我有一个列表hns[0],其中的位置给出了特定样本中的排名。即1运行hns[1] hnday = [[a,1,2,3],[b,1,2,3],[c,1,2,3]]运行`2而hns [2]运行3' a'运行在第1阶段中排名第1,第2阶段排名第3,第3阶段排名第2。

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

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

hns

所以现在(因为我仍然坚持循环思考,因为我是python的新手)在我看来,我必须遍历hnday并填充hnday[0][1] = 1,因为我去了指数值,比如' a' = 1并更新hnday[0][2] = 3 hnday[0][3] = 2和{{1}}

这似乎不是一种非常pythonic的方式来解决这个问题,我想问一下我能看到的其他方法。

2 个答案:

答案 0 :(得分:4)

这是我能想到的最蟒蛇和美丽的方式:

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

答案 1 :(得分:1)

我认为如果你这样做会获得更好的表现

if (strtolower($upvotetruedownvotefalse) === 'false') {
    $upvotetruedownvotefalse = false;
}
//the rest of your code here