在创建带有一些抽象方法的元类“ Shape”的上下文中,这些抽象方法将被即将来临的子类(如点,线,多边形等)覆盖,此外还应实现具体的“移动”方法。用于根据指定距离移动所有存储的坐标对(x / y)。
据我所知,最初,坐标对以元组的形式提供,并存储在列表列表中,如指令中所述。距离是一个元组,包含具有x和y值的坐标对。由于坐标值可以由一对x / y值(点)或n对(对于复杂多边形)组成,因此此处需要一定的灵活性。
class Shape(object):
def __init__(self, coords):
self._coords = list(map(list, coords))
def move(self, d):
d = list(d)
# missing magic
给定坐标存储为元组xy = ((1,1),(2,2),(3,3))
的元组。用p = Shape(xy)
初始化定义的类后,我需要p.move((5,5))
给出以下结果:
p._coords = [[6, 6], [7, 7], [8, 8]]
我已经尝试过某事。例如map(add, p._coords, d)
或[p+q for p, q in zip(p._coords, d)]
,但没有成功。我以为解决方案是单线的,但我根本无法解决问题。
任何帮助将不胜感激。预先感谢!
答案 0 :(得分:1)
将此类与move
一起用作嵌套列表理解:
class Shape(object):
def __init__(self, coords):
self._coords = coords
def move(self, d):
self._coords = [[x + y for x, y in zip(i, d)] for i in self._coords]
测试:
xy = ((1,1),(2,2),(3,3))
p = Shape(xy)
p.move((5, 5))
print(p._coords)
输出:
[[6, 6], [7, 7], [8, 8]]
答案 1 :(得分:0)
尝试一下?
self._coords = [[(coord + d[i]) for i, coord in enumerate(point)] for point in self._coords]
编辑:不必考虑如何单行处理,您总是可以显式地写出for循环,然后将其转换为列表理解形式。