【发布时间】:2018-04-25 04:37:27
【问题描述】:
假设我有一个矩阵M 和一个索引集idx=[(0,1),(2,3),(3,2)],我想创建两组元组idx_leq1,由第一个和第二个元素都小于或等于1 和@ 987654324@ 由第一个和第二个元素都大于或等于 2 的元组组成。
我想干净地访问元素 M[idx_leq1] 和 M[idx_geq2]。我试过idx_leq1 = tuple([e for e in idx if e[0]<=1 and e[1]<=1]),但这会返回idx_leq1 = ((0,1),),我不能用它来索引M。另一方面,idx_geq2 = tuple([e for e in idx if e[0]>=2 and e[1]>=2]) = ((2,3),(3,2)) 有效。
如果我的第一个索引集仅包含一个坐标对,我该如何解决这个问题?我不想做M[idx_leq1[0]]。
我可以做到:list(chain(*[(e,) for e in idx if e[0]<=1 and e[1]<=1])) 和 list(chain(*[(e,) for e in idx if e[0]>=2 and e[1]>=2])),但是我仍然需要为 idx_leq1 获取第一个元素,而我可以将 idx_geq2 传递给 M 并获取相应的元素。
谢谢!
【问题讨论】:
-
在我看来,第一个结果应该和第二个结果一样好。您是否以相同的方式对其进行迭代?在任何一种情况下,你都不能用元组的元组索引 M。
-
第一种情况并没有给我返回
M的(0,0)条目,而是像整个矩阵一样