我知道这应该很简单,但我仍然被卡住: - /
我有两个等长的数组a和b。有三个等长列表al1,al2,al3:其中我有数字对,使得(a [i],b [i])=(al1 [j],al2 [j])。我已经将i和j的所有这些索引分别放在aindex和lindex中。我想创建另一个包含来自al3的数字的数组c(等于数组a的长度)。
参见代码:
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']
请帮忙: - /
答案 0 :(得分: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']
它的工作方式是首先将c
初始化为包含所有a
s的长度nan
的列表:
>>> 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'
。