如何在Python 2.7中将列表添加到元素列表列表中?

时间:2019-06-28 07:58:05

标签: python

在创建带有一些抽象方法的元类“ 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)],但没有成功。我以为解决方案是单线的,但我根本无法解决问题。

任何帮助将不胜感激。预先感谢!

2 个答案:

答案 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循环,然后将其转换为列表理解形式。