Python如何修改X,Y列表中的Y值

时间:2014-01-20 20:39:49

标签: python

我正在使用python(2.7),我有一个长的嵌套X,Y坐标列表,指定行的终点。我需要将Y坐标移动指定的量。例如,这就是我想要做的事情:

lines = [((2, 98), (66, 32)), ((67, 31), (96, 2)), ((40, 52), (88, 3))]

执行一些令我不知所措的编码...

lines = [((2, 198), (66, 132)), ((67, 131), (96, 102)), ((40, 152), (88, 103))

任何人都可以告诉我如何才能完成这项工作?谢谢你的帮助!!

3 个答案:

答案 0 :(得分:4)

我会做类似的事情:

>>> dy = 100
>>> lines = [((2, 98), (66, 32)), ((67, 31), (96, 2)), ((40, 52), (88, 3))]
>>> newlines = [tuple((x,y+dy) for x,y in subline) for subline in lines]
>>> newlines
[((2, 198), (66, 132)), ((67, 131), (96, 102)), ((40, 152), (88, 103))]

与:

大致相同
newlines = []
for subline in lines:
    tmp = []
    for x,y in subline:
        tmp.append((x, y+dy))
    tmp = tuple(tmp)
    newlines.append(tmp)        

答案 1 :(得分:2)

在编程中,将事物分成更小的单位。

定义一个转移一个点的函数:

def shift_point(point, dx=0, dy=0):
    x, y = point
    return (x + dx, y + dy)

然后换一条线:

def shift_line(line, dx=0, dy=0):
    point1, point2 = line
    return (shift_point(point1, dx, dy),
            shift_point(point2, dx, dy))

最后,使用列表推导创建新列表:

lines = [((2, 98), (66, 32)), ((67, 31), (96, 2)), ((40, 52), (88, 3))]
lines = [shift_line(line, dy=100) for line in lines]

会给出你需要的结果。有更短的解决方案,但我认为这样做可以建立良好的习惯。

(编辑:将变量名'xdistance'和'ydistance'更改为'dx'和'dy')

答案 2 :(得分:1)

元组是不可变的,所以当前结构化是不可能的,如果不将行或点作为列表,或者每次都从头开始重建

指向列表,作为元组行:

line = lines[0]
for point in line:
    point[1] += 100

作为列表行,指向元组:

line = lines[0]
for i, (x, y) in enumerate(line):
    line[i] = x, y+100

或完全重建对象:

lines[0] = tuple(((x, y+100) for x, y in lines[0]))