在循环中通过enumarte访问索引和列表项

时间:2017-11-18 17:02:43

标签: python

我有一个像这样的嵌套列表

   list = [[1,0,0], [1,0,1], [1,1,1]]

第一个列表的每个索引表示1的总和。对于指数0,得分为1,对于指数1,得分为2,对于指数3,得分为3。

在嵌套列表中,索引的每个位置(其中有1)表示对分数的添加。分数中的加法等于具有与在2个嵌套列表中的第一个中找到1的位置相同的分数。

如果在第二个嵌套列表中,1的位置在索引位置0和2中,就像在第一个嵌套列表中的索引1中一样,则得分增加1 + 3.

我要做的是编写一个单独的或嵌套的循环,从简单的分数总和中添加所有分数,然后添加其他分数。 像

这样的东西
    for i, k in enumarate(list):
      score = sum(k)
      score += sum(k[i])

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

list = [[1,0,0], [1,0,1], [1,1,1]]
intermediate = [sum(i)+sum(c*(d+1) for d, c in enumerate(i)) for i in list] #for demonstration purposes
print(intermediate) #[2, 6, 9]
final_data = sum(sum(i)+sum(c*(d+1) for d, c in enumerate(i)) for i in list)

输出:

17

注意@schwobaseggl在指出最终列表的分数是9时是正确的,因为根据OP的逻辑,最后一个总和应该是3 + 1 + 2 + 3 = 9.

答案 1 :(得分:0)

如果我假设您在评论中描述的分数应该是2,6和9,那么您可以执行以下操作:

lst = [[1,0,0], [1,0,1], [1,1,1]]
scores = [sum(l) + sum(x*sum(y) for x, y in zip(l, lst)) for l in lst]
# [2, 6, 9]

答案 2 :(得分:0)

也许尝试使用列表理解:

alist = [[1, 0, 0], [1, 0, 1], [1, 1, 1]]

for i, k in enumerate(alist):
    score = sum(k)
    score += sum([index + 1 for (index, item) in enumerate(k) if item == 1])
    print(score)

2
6
9