[英]Python : creating an array from list with given indices
我知道这应该很简单,但我仍然被卡住: - /
我有两个等长阵列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']
请帮忙 :-/
我必须承认我不知道你在做什么,但你似乎想要的是:
>>> 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
包含所有nan
的长度a
的列表:
>>> 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'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.