Python在List中找到元素的索引并在另一个List中删除

时间:2017-03-24 15:47:05

标签: python python-2.7 list indexing range

我正在使用Python 2.7,但无法找到我的问题的答案。

我有3个列表(x和y坐标以及检测到的圆的半径):

XSum = [1316, 1324, 1330, 1344, 1356, 1344, 1356, 1308, 1322, 1310, 1336, 1934]
YSum = [960,  952,  972,  954,  964,  970,  948,  928,  940,  950,  984,  1080]
RSum = [379,  375,  355,  352,  340,  347,  338,  348,  361,  342,  342,  286]

我必须在XSum中找到不在675和1350之间的元素(索引4,6和11)。必须从所有三个列表中删除包含索引的元素。

XSum = [1316, 1324, 1330, 1344, **1356**, 1344, **1356**, 1308, 1322, 1310, 1336, **1934**]
YSum = [960,  952,  972,  954, **964**,  970,  **948**,  928,  940,  950,  984,  **1080**]
RSum = [379,  375,  355,  352,  **340**,  347,  **338**,  348,  361,  342,  342,  **286**]

首次删除超出范围的索引后:

XSum2 = [1316, 1324, 1330, 1344, 1344, 1308, 1322, 1310, 1336]
YSum2 = [960,  952,  972,  954,  970,  928,  940,  950,  984]
RSum2 = [379,  375,  355,  352,  347,  348,  361,  342,  342]

下一步是在YSum中找到不在940和980之间的元素,并从所有三个列表中删除检测到的索引(索引9)。

XSum2 = [1316, 1324, 1330, 1344, 1344, 1308, 1322, 1310, **1336**]
YSum2 = [960,  952,  972,  954,  970,  928,  940,  950,  **984**]
RSum2 = [379,  375,  355,  352,  347,  348,  361,  342,  **342**]

结果列表应如下所示:

XSum_Result = [1316, 1324, 1330, 1344, 1344, 1308, 1322, 1310]
YSum_Result = [960,  952,  972,  954,  970,  928,  940,  950]
RSum_Result = [379,  375,  355,  352,  347,  348,  361,  342]

我认为这应该是一项简单的任务,但我无法弄清楚如何从其他列表中删除索引。

谢谢大家的帮助

2 个答案:

答案 0 :(得分:3)

您可以使用zip将它们组合在一起并执行您的逻辑以对候选项进行分组,然后再次压缩(反转原始zip)并将其解压缩到列表中,例如:

x, y, r = (list(el) for el in zip(*((a, b, c) for a, b, c in zip(XSum, YSum, RSum) if 675 <= a <= 1350 and 940 <= b <= 980)))

答案 1 :(得分:0)

您应该发布一篇文章或代码,以帮助我们了解如何为您提供帮助。

这是一个非常基本的想法,假设所有列表都被排序为彼此匹配(我的意思是按索引顺序):

<exec executable="${exe.baroverride}"
      spawn="false"
      failonerror="true"
      outputproperty="baroverride.out"
/>
<echo>baroverride.out: ${baroverride.out}</echo>

它应该打印出来

a = [1, 2, 3]
b = ['a', 'b', 'c']
for i in range(0, len(a)):
    if a[i] == 2:
        b.pop(i)
        break
print(b)

现在,您可以想象这种机制嵌套在一个类中,该类包含一个由插入和弹出方法管理好的数组数组,它​​就像abc一样简单。