索引列表和其他列表?-Python 2.7

索引列表和其他列表?-Python 2.7,python,list,python-2.7,indexing,Python,List,Python 2.7,Indexing,我对python从IDL转换有些陌生,因此如果我没有使用正确的术语,我深表歉意。我试过寻找类似的,但似乎找不出来。我有两个列表,我试图创建一个dat2=1的数据直方图。我尝试了多种方法,但它总是给我一个打字错误 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 enum

我对python从IDL转换有些陌生,因此如果我没有使用正确的术语,我深表歉意。我试过寻找类似的,但似乎找不出来。我有两个列表,我试图创建一个dat2=1的数据直方图。我尝试了多种方法,但它总是给我一个打字错误

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索引必须是整数,而不是list。我尝试了ind=mapint、ind和ind=[inti for I in ind],但没有成功

data = [ d1 for (d1, d2) in zip(data, dat2) if d2 == 1 ]
plt.hist(data)
这会将数据和dat2压缩在一起,创建元组列表[1.1,1,4.2,1…]。然后,您可以使用列表理解来仅保留第二个元素为1的元组


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

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

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

使用NumPy数组可以尝试这样做,因此最好将数据和dat2初始化为NumPy数组。如果从文本文件读取数据,我不确定如何执行此操作?NumPy提供了和等函数,以将数据从文件加载到NumPy数组,如果它们不够好,那么可以通过调用它们将列表转换为NumPy数组。