我对python很新,所以我很感激我能得到任何帮助。如何重新排列A看起来像B?
A=([3,5,6,9,0,0,0,0,0])
B=([0,0,3,0,5,6,0,0,9])
具体来说,我想使用条目作为索引重新排列A.所以我希望B的第3,第5,第6和第9个元素成为该索引的值。
答案 0 :(得分:4)
由于这是标记为numpy,这是一个numpy解决方案:
In [11]: A = np.array([3,5,6,9,0,0,0,0,0])
在A:
中提取非零元素的poisitionIn [12]: np.nonzero(A)[0]
Out[12]: array([0, 1, 2, 3])
In [13]: ind = A[np.nonzero(A)[0]]
修剪零可能是等效的(取决于游戏规则):
In [14]: np.trim_zeros(A)
Out[14]: array([3, 5, 6, 9])
创建一个零的B,然后用ind:
填充In [15]: B = np.zeros(A.max() + 1)
In [16]: B[ind] = ind
In [17]: B
Out[17]: array([ 0., 0., 0., 3., 0., 5., 6., 0., 0., 9.])
答案 1 :(得分:2)
我假设您在A中没有任何重复元素或者大于列表A的长度的元素。然后,使用列表理解,
B = [ i if i in A else 0 for i in range(1,10) ]
会起作用。
首先,列表理解
[i for i in range(1,10)]
给出[1, 2, 3, 4, 5, 6, 7, 8, 9]
。如果此列表中的元素不属于列表0
,您希望放置A
。因此,您将列表解析中的第一个i
替换为i if i in A else 0
。这意味着如果i
属于A
,则替代0
,{{1}}将保持不变。