索引列表与另一个列表? - Python 2.7

时间:2015-02-08 22:02:03

标签: python list python-2.7 indexing

我对python有点新鲜(从IDL转换),所以如果我没有使用正确的术语,我会道歉。我试过寻找类似的questions,但似乎无法弄清楚。我有两个列表,我试图创建数据的直方图,其中dat2 = 1.我已经尝试过多种方式,它一直给我一个TypeError

import matplotlib.pyplot as plt
import numpy as np
data = [1.1,4.2,5.3,8.6,10.0,1.2,41.4,23.2]
dat2 = [1,1,1,1,2,2,2,2]
ind = [i for i,v in enumerate(dat2) if v==1]
bins = np.arange(0,45,5)
plt.hist(data[ind],bins)

错误指向hist()行并说" TypeError:list indices必须是整数,而不是list。"我试过ind=map(int,ind)ind=[int(i) for i in ind]没有运气。

2 个答案:

答案 0 :(得分:0)

data = [ d1 for (d1, d2) in zip(data, dat2) if d2 == 1 ]
plt.hist(data)

datadat2拉到一起,创建一个元组列表[ (1.1, 1), (4.2, 1) ... ]。然后,您可以使用列表推导来仅保留第二个元素为1的元组。

最后,如果列表足够长以使内存成为问题,则可以将zip替换为itertools.izip,它将返回压缩列表的迭代器,而不是显式构造它们。

答案 1 :(得分:0)

当您进行数学运算时,通常使用numpy包的ndarray对象,该对象特别允许这种索引:

data = np.array(data)
...
data[ind]