我有一本代表圆心和半径的词典。你知道吗
[{centre:(743,1105), radius: 41},
{centre:(743, 1106), radius: 48},
{centre:(899, 1443), radius: 48},
{centre:(900, 1442), radius: 40}]
我想移除基于x轴位置的闭合圆。如果两个圆的x轴之差大于0小于3,则半径较大的圆将被删除。你知道吗
def takeXAxis(input):
return input['centre'][0]
def sortCircles(circleDetails):
circleDetails.sort(key=takeXAxis)
def removeClosedCircle(circleDetails):
newCircleDetails = []
for i in range(len(circleDetails)):
j = i + 1
for j in range(len(circleDetails)):
...
我对Python非常陌生,不知道如何完成它。你知道吗
这是我希望得到的结果:
[{centre:(743,1105), radius: 41},
{centre:(900, 1442), radius: 40}]
将对每个元素进行比较。例如:
0<;=| 743-743 |<;=3,48>;41,因此将删除第二个。你知道吗
| 743-899 |>;=3,| 743-900 |>;=3,这里什么都不会发生。你知道吗
0<;=| 899-900 |<;=3,48>;40,因此将删除第三个。你知道吗
已更新
这就是我想出的解决办法。但是速度很慢。有人知道如何优化它吗?你知道吗
def takeXAxis(input):
return input['centre'][0]
def removeaAdjacentCircle(circleDetails):
circleDetails.sort(key=takeXAxis)
newCircleDetails = []
indexOfRemovedCircle = []
for i in range(0, len(circleDetails)):
if i in indexOfRemovedCircle:
continue
for j in range(i + 1, len(circleDetails)):
delta = abs(circleDetails[i]['centre'][0] - circleDetails[j]['centre'][0])
if 0 <= delta <= 3:
if circleDetails[i]['radius'] - circleDetails[j]['radius'] >= 0:
indexOfRemovedCircle.append(i)
else:
indexOfRemovedCircle.append(j)
for i in range(0, len(circleDetails)):
if i in indexOfRemovedCircle:
continue
newCircleDetails.append(circleDetails[i])
return newCircleDetails
使用
itertools.combinations()
。我相信它比嵌套循环更有效。你知道吗我已经发表了一些评论来说明这一点。如果你想知道什么,尽管问。你知道吗
希望能有帮助:)
相关问题 更多 >
编程相关推荐