我的for循环中的错误在哪里?

2024-03-28 22:29:51 发布

您现在位置:Python中文网/ 问答频道 /正文

Targets包含目标值,Observation包含观察值。 我希望for循环计算每个观察值的不同目标值的数量,并将它们存储在矩阵obs_array中,其中行是对象值,列是目标值。 对于我提供的示例,它必须返回:

obs_array = [[3,2],[2 5]]

这意味着对于观测值中的零,目标值中有3乘以0和2乘以1(第一个列表),对于观测值中的零,有2乘以0和5乘以1(第二个列表) 但是循环没有正常工作。你能找到问题并给我解释一下吗?(我是Python新手)

Target = [1,1,1,0,0,1,0,1,1,0,0,1]
Observation = [1,0,1,0,1,1,0,1,1,1,0,0]

target_values = list(set(S))
observation_values = list(set(A))
obs_array = [[0 for x in range(len(observation_values))] for x in range(len(target_values))]

for k in range(len(observation_values)):
    for kk in range(len(Observation)):
        if observation_values[k] == Observation[kk]:
           for kkk in range(len(Target)):
               for kkkk in range(len(target_values)):
                   if Target[kkk] == target_values[kkkk]:
                       obs_array[k][kkkk]+=1

print(obs_array)

Tags: intarget列表forlenrangearraylist
1条回答
网友
1楼 · 发布于 2024-03-28 22:29:51

我知道这并不是你问题的答案,但这里有一个解决你问题的有趣方法(部分是为了帮助其他人理解你的要求,因为这个问题很混乱):

from collections import Counter

for (s, a), count in Counter(zip(S, A)).items():
    obs_array[s][a] = count

print obs_array  # [[3, 2], [2, 5]]

编辑:我现在意识到没有必要耍这种把戏。此代码也适用于:

for i in range(len(S)):
    obs_array[S[i]][A[i]] += 1

相关问题 更多 >