如何迭代Python列表并删除类似的元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何迭代Python列表并删除类似的元素?相关的知识,希望对你有一定的参考价值。
我有一个字典列表,代表圆的中心和半径。
[{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()
。我相信它比嵌套循环更有效。
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
我已经发表评论以表明这一点。随意询问您是否需要了解任何信息。
希望它会有所帮助:)
以上是关于如何迭代Python列表并删除类似的元素?的主要内容,如果未能解决你的问题,请参考以下文章
Python 元组tuple 列表list 字典dict集合set迭代器生成器