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

时间:2016-04-21 17:22:39

标签: python for-loop

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

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

意味着对于观察中的零,目标值中有3次0和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)

1 个答案:

答案 0 :(得分:2)

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

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