在python中索引列表有什么问题?

时间:2015-06-08 10:11:15

标签: python numpy

这不是一个重复的问题,因为我想知道我的代码有什么问题,而不是找到替代解决方案。

下面的代码出了什么问题?
结果只包含51个,但它还应该包含列表'data_B'中的其他元素30,11,29。

import numpy as np

names_A = ['David', 'Mark', 'Brian', 'Michael']
data_A = [4,3,1,2]

names_B = ['Mark', 'David', 'Michael', 'Brian']
data_B = [51,30,11,29]

data = np.array([[4,4,3,3,2,2,1,1,3,3],
                [4,3,3,3,2,2,3,1,3,1],
                [4,2,3,3,2,2,4,1,4,3]])


dats = data.ravel()

results = []
for d in dats:
    nam_A = names_A[data_A == int(d)]
    ##HERE IS THE POTENTIAL ERROR!!!
    dat_B = data_B[names_B == nam_A]
    results.append(dat_B)

print np.array(results).reshape(data.shape)


[[51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]
 [51 51 51 51 51 51 51 51 51 51]]

1 个答案:

答案 0 :(得分:3)

下面我的代码出了什么问题?

data_A == int(d)返回False/0,因为列表永远不会等于整数,所以每次0 nam_A的元素David都会得到相同的内容。

然后您再次使用dat_B = data_B[names_B == nam_A]又名['Mark', 'David', 'Michael', 'Brian'] == "David",因为列表不能等于字符串False/0,因此您添加了0的{​​{1}}元素} data_B一次又一次......

我不知道代码的逻辑是什么,你创建一个数组,调用ravel并且不要将数组用于列表无法做的任何事情。