从列表中的矩阵添加特定数字

时间:2017-10-06 13:28:53

标签: python-3.x list loops matrix

我有一个初始化的列表:

    [[    0  1308 17410 16098]
     [ 1246     0 17557 16244]
     [17675 18002     0  5618]
     [16257 16584  5508     0]]

作为矩阵的finalList如下所示:

    [[    0  1308 17410 16098]
     [ 1246     0 17557 16244]
 --> [17675 18002     0  5618]
     [16257 16584  5508     0]]

我要做的是迭代best_selected的每个列表并根据它在另一个列表中的索引添加它们。并且让我们说在第一次迭代中是best_selected列表中的[2,3,0,1]。列表中的第一个元素是2,所以我将开始:

    [[    0  1308 17410 16098]
     [ 1246     0 17557 16244]
     [17675 18002     0  5618]
 --> [16257 16584  5508     0]]

由于在best_selected的第一次迭代中,下一个2的数量分别为3,所以我将得到5618作为索引中的第一个值。由于它在3点停止,我现在将在下一步检查:

count = len(best_selected)
index = 0
j = 0 
val = best_selected[0]
while count != 0:
    index = index + finalList[best_selected[val]]
    if counter == 1:
        pass
    else:
        val = best_selected[j+1]
    j = j + 1
    counter = counter - 1
print(index)

由于3的下一个元素是0 *,然后我会尝试在包含值5618的变量'index'中添加16257,因此索引现在将包含值16257 + 5618.我正在尝试做在best_selected的每次迭代中,到目前为止我都有错误

我正在努力解决的代码:

I_AM_WONDERING_ABOUT_THE_MAXIMUM_LENGTH_OF_THIS_STRING_RIGHT_HERE=this-is-some-really-helpful-html-file.html

非常感谢任何修复或简单的解决方案!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要当前项目的滑动窗口以及子列表中的下一个项目。您可以遍历子列表,然后遍历范围range(len(sublist)-1),以便您可以将第一个索引分配给i = sublist[indx],将第二个索引分配给j = sublist[indx+1]

index = 0

for sublist in best_selected:
    for indx in range(len(sublist)-1):
        i = sublist[indx]
        j = sublist[indx+1]
        index += finalList[i][j]

更好的变体是zip子列表sublist[1:]来获取带有索引的元组,你可以立即在循环的头部解压缩:

for sublist in best_selected:
    for i, j in zip(sublist, sublist[1:]):
        index += finalList[i][j]

以下是具有单独子列表总和的解决方案:

sums = []

for sublist in best_selected:
    sublist_sum = 0
    for i, j in zip(sublist, sublist[1:]):
        sublist_sum += finalList[i][j]
    sums.append(sublist_sum)

print(sums)
print(sum(sums))