如何迭代Python列表并删除类似的元素?

如何迭代Python列表并删除类似的元素?,python,arrays,list,iteration,Python,Arrays,List,Iteration,我有一个代表圆心和半径的字典列表 [{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']

我有一个代表圆心和半径的字典列表

[{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=3,| 743-900 |>=3,这里不会发生任何事情


0使用
itertools.compositions()
。我相信它比嵌套循环更有效

import itertools

my_list = [
    {'centre':(743,1105), 'radius': 41},
    {'centre':(743, 1106), 'radius': 48},
    {'centre':(899, 1443), 'radius': 48},
    {'centre':(900, 1442), 'radius': 40}
]

for a, b in itertools.combinations(my_list, 2):

    # only need to do something if the diff is in range..
    if abs(a['centre'][0] - b['centre'][0]) <= 3:

        # check the radius, if bigger, remove it, else remove the other.
        if a['radius'] > b['radius']:
            my_list.remove(a)
        else:
            my_list.remove(b)

print my_list
导入itertools
我的清单=[
{'center':(7431105),'radius':41},
{'center':(7431106),'radius':48},
{'center':(8991443),'radius':48},
{'center':(9001442),'radius':40}
]
对于itertools.组合中的a、b(我的清单,2):
#仅当差异在范围内时才需要执行操作。。
如果abs(a['center'][0]-b['center'][0])b['radius']:
我的清单。删除(a)
其他:
我的清单。删除(b)
打印我的清单
我已经发表了一些评论来说明这一点。如果你需要知道什么,尽管问


希望有帮助:)

两个圆的x轴差大于或小于3
,此条件将覆盖所有记录。你确定这是正确的吗?最后只剩下
1
记录。@MayankPorwal结果将是[{中心:(7431105),半径:41},{中心:(9001442),半径:40}]。第一个圆的x与第二个圆的x相同。0所以您不想再次将列表中的每个元素与它们进行比较?看起来你想把它们排列整齐吗?@NimeshkaSrimal我想把每一对都比较一下。我想用双for循环,但我不知道怎么写。你确定你的预期输出吗?因为你的问题中有矛盾的陈述。
import itertools

my_list = [
    {'centre':(743,1105), 'radius': 41},
    {'centre':(743, 1106), 'radius': 48},
    {'centre':(899, 1443), 'radius': 48},
    {'centre':(900, 1442), 'radius': 40}
]

for a, b in itertools.combinations(my_list, 2):

    # only need to do something if the diff is in range..
    if abs(a['centre'][0] - b['centre'][0]) <= 3:

        # check the radius, if bigger, remove it, else remove the other.
        if a['radius'] > b['radius']:
            my_list.remove(a)
        else:
            my_list.remove(b)

print my_list