如何成对检查列表中的项目

时间:2017-09-08 14:13:43

标签: python list turtle-graphics

我正在使用Turtle随机路径生成器处理python。我有一只乌龟在飞机上起作用,从 (function(){ angular .module('myApp',[]) .controller('myCtrl', Controller); Controller.$inject = ['$rootScope', '$scope']; function Controller($rootScope, $scope){ activate(); /** * @method activate * @description function to be called when controller is activate */ function activate(){ $scope.sectionHeader = 'Activities'; $scope.sectionUndecoratedList = [ {'activites':'demo'}, {'activites':'3'}, {'activites':'test'}, {'activites':'1'} ] var reg = new RegExp('^[0-9]$'); for (var i = 0; i < $scope.sectionUndecoratedList.length; i++) { var a = $scope.sectionUndecoratedList[i]; if(reg.test(a.activites)){ a.isNumber = true; } } } } })(); 北,南,东或西的单位移动,直到它碰到一个边界。我不希望它在相同的坐标上运行两次,所以我运行它我在列表中添加过去的坐标,它会增长如下:10px然后[0, 0]然后[0, 0, 10, 0]我的问题是我如何比较列表中的项目,如[0, 0, 10, 0, 10, -10]等,因为我目前的方法是将(0, 0) (10, 0) (10, -10)x保存在两个单独的列表中,这样就无法继续整个轴。这是我的code

3 个答案:

答案 0 :(得分:1)

简短回答:

next_coordinate = [10, 10]

if next_coordinate not in [[visited[2*i], visited[2*i+1]] for i in range(len(visited) / 2)]:
    # make step...

但是,我认为您可以更好地存储访问点。例如,元组列表:

[(0, 0), (10, 0), (10, -10)]

或者使用二维矩阵。

矩阵使用O(n*n)内存。它具有快速查找功能,但需要更多内存。

列表使用内存与访问坐标对的数量成比例,如果您需要存储大量的点,这可能会节省大量内存。

答案 1 :(得分:0)

您可能需要创建一个班级职位并将职位列入名单

class Position(object):
    def __init__(self, x,y):
        self.x= x
        self.y= y

my_moves = []

for i in range(100):
    my_moves.append(Position(i*10,y*10))

# to get your moves

for obj in my_moves:
    print obj.x + "," obj.y

答案 2 :(得分:0)

如果要从xys坐标列表切换到元组列表,可以使用zip和列表理解:

>>> xys = [0, 0, 10, 0, 10, -10]
>>> [xy for xy in zip(xys[::2], xys[1::2])]
[(0, 0), (10, 0), (10, -10)]

如果您想快速检查某个点是否已被访问过,您可以保留一组元组:

>>> already_visited = set(xy for xy in zip(xys[::2], xys[1::2]))
>>> (10,0) in already_visited
True
>>> (10,10) in already_visited
False