0

我知道这应该很简单,但我仍然卡住了:-/

我有两个等长数组a和b。有三个等长列表 al1, al2, al3 :其中我有 (a[i],b[i])=(al1[j],al2[j]) 的数字对。我已将 i 和 j 的所有这些索引分别放在 aindex 和 lindex 中。我想创建另一个数组 c(等于数组 a 的长度),其中包含来自 al3 的数字。

见代码:

import numpy as np

list1 = [9,7,8,2,3,4,1,6,0,7,8]
a = np.asarray(al)
list2 = [5,4,2,3,4,3,4,5,5,2,3]
b = np.asarray(bl)

al1 = [9,4,5,1,7]
al2 = [5,3,6,4,5]
al3 = [5,6,3,4,7]

lindex = [0,5,6]
aindex = [0,1,3]
index = np.asarray(aindex)

c = []
for i in range(0,len(list1)):
    if i in aindex:
    com = al3[i]
else:
    com = 'nan'

c.append(com)

我得到的是

c = [5, 6, 'nan', 4, 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan']

我想要的是

c = [5, 'nan', 'nan', 'nan', 'nan', 6, 4, 'nan', 'nan', 'nan', 'nan']

请帮忙 :-/

4

1 回答 1

2

我必须承认我不知道你在做什么,但你似乎想要的是:

>>> c = ['nan'] * len(a)
>>> for i, j in zip(aindex, lindex):
...     c[j] = al3[i]
... 
>>> c
[5, 'nan', 'nan', 'nan', 'nan', 6, 4, 'nan', 'nan', 'nan', 'nan']

他们的工作方式是首先初始化为包含所有sc的长度列表:anan

>>> c = ['nan'] * len(a)
>>> c
['nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan', 'nan']

什么zip是将每个列表的元素配对在一起:

>>> zip(aindex, lindex)
[(0, 0), (1, 5), (3, 6)]

所以我遍历每一对,取al3第一个索引处的值并将其分配到c第二个索引处。任何未分配的内容都会保留'nan'

于 2013-09-24T15:32:54.307 回答