嵌套for循环以比较元素

时间:2015-11-06 16:17:30

标签: class python-3.x methods

我必须编写一个函数来返回单独的圆圈数量和#39;意思是不接触任何其他圈子。所有圈子都包含在名为self.__的列表中。

我已经有一个名为overlaps(aCircle)的函数,如果它与另一个圆重叠则返回True,如果没有,则返回None。所以基本上我必须检查列表中的圆圈是否与同一列表中的另一个圆圈重叠,如果它返回“无”,则表示它是“单独”#39;。

我似乎无法理解我将如何迭代同一个列表两次,而不是比较一个圆圈是否重叠,因为它总会返回True

2 个答案:

答案 0 :(得分:0)

使用Python的itertools,您可以迭代列表中所有可能的圆圈对。这样做的另一个好处是,如果您已经将A与B进行了比较,则最终不会将A与A重新比较。

from itertools import combinations
for circle1, circle2 in combinations(self.__, 2):
    if circle1.overlaps(circle2):
        # do something

答案 1 :(得分:0)

如果列表中的圆圈值不同,那么这就足够了。

for c1 in range(len(self.__)):
    for c2 in range(len(self.__)):
        if c2 < c1: #If prevents comparison twice thanks to Terry Jan Reedy's suggestion
            circle1 = self._[c1]
            circle2 = self._[c2]
            #check if circle overlaps using circle1 and circle2

否则使用enumerate跟踪正在检查的项目

for c1, circle1 in enumerate(self.__):
    for c2, circle2 in enumerate(self.__):
        if c2 < c1: #If prevents comparison twice thanks to Terry Jan Reedy's suggestion
            #check if circle overlaps using circle1 and circle2