我主要关心的是效率。我有一个很长的ID列表,还有一个更短的ID列表。我想存储第二个列表中与第一个列表中的每个ID相对应的ID的位置(每个ID在每个列表中只出现一次)。我已经编写了一个嵌套的for循环来实现这一点,但是由于第一个列表包含超过1000个元素,而第二个列表包含超过80k个元素,因此下面的代码花费了很长时间(但是可以工作)。在
IDD1 = [0] * leng
IDD2 = [0] * leng
## Match IDs to position in table
for i in range(leng):
for j in range(len(halo_id)):
if ID1[i] == halo_id[j]:
IDD1[i] = j
if ID2[i] == halo_id[j]:
IDD2[i] = j
如果有关联,那么id最初来自halotools halo目录表。在
编辑:
数据实际上只是两种情况下的整数列表。我想要的结果是一个整数(索引)列表。ID1和ID2本质上是一样的,我只需要用同样的方法对它们进行操作。它们是我之前的整数列表。光环是一样的,但长得多。在
首先,创建一个ID到position的映射:
然后迭代较小的列表并将其放入映射中:
^{pr2}$这将操作从O(n*m)减少到O(n+m)。在
相关问题 更多 >
编程相关推荐