我有一个像这样的嵌套列表
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])
答案 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