我正在使用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))
任何人都可以告诉我如何才能完成这项工作?谢谢你的帮助!!
答案 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]))