索引列表与另一个列表? - Python 2.7
Index list with another list? - Python 2.7
我对 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 must be integers, not list." 我试过 ind=map(int,ind)
和 ind=[int(i) for i in ind]
但没有成功。
data = [ d1 for (d1, d2) in zip(data, dat2) if d2 == 1 ]
plt.hist(data)
这会将 data
和 dat2
压缩在一起,创建一个元组列表 [ (1.1, 1), (4.2, 1) ... ]
。然后,您可以使用列表理解仅保留那些第二个元素为 1
.
的元组
最后,如果列表足够长以至于内存成为问题,您可以将 zip
替换为 itertools.izip
,returns 是压缩列表的迭代器,而不是显式构建它们。
当你做数学时,你通常使用 numpy
包的 ndarray
对象,它特别允许这种索引:
data = np.array(data)
...
data[ind]
我对 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 must be integers, not list." 我试过 ind=map(int,ind)
和 ind=[int(i) for i in ind]
但没有成功。
data = [ d1 for (d1, d2) in zip(data, dat2) if d2 == 1 ]
plt.hist(data)
这会将 data
和 dat2
压缩在一起,创建一个元组列表 [ (1.1, 1), (4.2, 1) ... ]
。然后,您可以使用列表理解仅保留那些第二个元素为 1
.
最后,如果列表足够长以至于内存成为问题,您可以将 zip
替换为 itertools.izip
,returns 是压缩列表的迭代器,而不是显式构建它们。
当你做数学时,你通常使用 numpy
包的 ndarray
对象,它特别允许这种索引:
data = np.array(data)
...
data[ind]