【问题标题】:How to check items in a list in pairs如何成对检查列表中的项目
【发布时间】:2018-02-17 12:00:19
【问题描述】:

我正在使用 Turtle 随机路径生成器开发 python。我让乌龟从原点开始在飞机上工作,并以10px 北、南、​​东或西为单位移动,直到它到达设定的边界。我不希望它在同一个坐标上运行两次,所以我运行它我将过去的坐标添加到一个列表中,它会像这样增长:[0, 0] 然后[0, 0, 10, 0] 然后[0, 0, 10, 0, 10, -10] 等等。我的问题是我怎么能成对比较列表中的项目,例如(0, 0) (10, 0) (10, -10) 等,因为我目前将xy 保存在两个单独的列表中的方法会阻止它在整个轴上运行。这是我的code

【问题讨论】:

  • 尝试使用 (x,y) 元组列表

标签: python list turtle-graphics


【解决方案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) 内存。它具有快速查找功能,但需要更多内存。

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

【讨论】:

    【解决方案2】:

    您可能需要创建一个班级职位并将这些职位放入一个列表中

    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
    

    【讨论】:

      【解决方案3】:

      如果您想从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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多