我有一个如下所示的列表:
[[(0, 0), (0, 500), (0, 1000)],
[(500, 0), (500, 500), (500, 1000)],
[(1000, 0), (1000, 500), (1000, 1000)]]
我需要它看起来像这样:
[[(0, 0), (500, 500)],
[(0, 500), (500, 1000)],
[(500, 0), (1000, 500)],
[(500, 500), (1000, 1000)]]
请注意,忽略第一个列表的最后一个元素,就像上一个列表的第一个元素一样。
这些是Pillow中图像裁剪的坐标。 (0,0)和(500,500)是段的左上角和右下角的坐标。 我已经工作了几个小时试图解决这个问题,但不能。 非常感谢帮助。
答案 0 :(得分:4)
dat = [[(0, 0), (0, 500), (0, 1000)],
[(500, 0), (500, 500), (500, 1000)],
[(1000, 0), (1000, 500), (1000, 1000)]]
new_dat = []
for i in range(0,len(dat)-1):
new_dat += zip(dat[i][:len(dat)-1], dat[i+1][1:])
print new_dat
打印:
[((0, 0), (500, 500)), ((0, 500), (500, 1000)), ((500, 0), (1000, 500)), ((500, 500), (1000, 1000))]
额外缩进:
[((0, 0), (500, 500)),
((0, 500), (500, 1000)),
((500, 0), (1000, 500)),
((500, 500), (1000, 1000))]
答案 1 :(得分:1)
为了创建复杂的迭代器,我发现使用生成器函数可以极大地简化问题:
L = [[(0, 0), (0, 500), (0, 1000)],
[(500, 0), (500, 500), (500, 1000)],
[(1000, 0), (1000, 500), (1000, 1000)]]
def pair_generator(it):
it = iter(it)
item0 = next(it)
for item1 in it:
yield [item0[0],item1[1]]
yield [item0[1],item1[2]]
item0 = item1
result = list(pair_generator(L))
print result