Python:使用给定索引从列表创建数组

时间:2013-09-24 15:25:37

标签: python arrays list

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

我有两个等长的数组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']

请帮忙: - /

1 个答案:

答案 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'