使用枚举和映射
Use of enumerate and mapping
newResidues = [1, 2, 3, 4, 5]
newI = [[1,0,1,0,1],[1,1,0,0,0],[1,0,0,1,0]]
newI = np.array(newI)
for i in range(newI.shape[0]):
indices = [for i,num in enumerate(newI) if num == 1] #line1
indicesToResidues = dict(zip(indices,newResidues[indices]))#line2
所以我知道我的代码不正确...这只是我尝试做的尝试...
在第 1 行中,我尝试做的是在矩阵中每行有 1 的地方单独列出索引。所以矩阵第一行的索引看起来像 [0,2,5]
在第 2 行中,尝试将这些索引映射到列表 newResidues 中具有相同索引的特定值。
任何 help/comments 将不胜感激,谢谢!
用以下内容替换您的循环:
from itertools import compress
for i in newI:
print map(lambda _: newResidues.index(_), compress(newResidues, i))
itertools.compress
非常简洁,似乎非常适合您的用例。在上面从 compress
取回值后,它从 newResidues
找到每个值的索引——但是,如果 newResidues
中有重复值,这将无法正常工作!
newResidues = [1, 2, 3, 4, 5]
newI = [[1,0,1,0,1],[1,1,0,0,0],[1,0,0,1,0]]
newI = np.array(newI)
for i in range(newI.shape[0]):
indices = [for i,num in enumerate(newI) if num == 1] #line1
indicesToResidues = dict(zip(indices,newResidues[indices]))#line2
所以我知道我的代码不正确...这只是我尝试做的尝试...
在第 1 行中,我尝试做的是在矩阵中每行有 1 的地方单独列出索引。所以矩阵第一行的索引看起来像 [0,2,5]
在第 2 行中,尝试将这些索引映射到列表 newResidues 中具有相同索引的特定值。
任何 help/comments 将不胜感激,谢谢!
用以下内容替换您的循环:
from itertools import compress
for i in newI:
print map(lambda _: newResidues.index(_), compress(newResidues, i))
itertools.compress
非常简洁,似乎非常适合您的用例。在上面从 compress
取回值后,它从 newResidues
找到每个值的索引——但是,如果 newResidues
中有重复值,这将无法正常工作!