我正在使用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]
我认为这应该是一项简单的任务,但我无法弄清楚如何从其他列表中删除索引。
谢谢大家的帮助
答案 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一样简单。