通过循环中的枚举访问索引和列表项



我有一个这样的嵌套列表

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

也许尝试使用列表理解:

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

你可以试试这个:

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。

如果我假设您在注释中描述的分数应该是 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]

最新更新