提问人:svn 提问时间:6/3/2023 更新时间:6/3/2023 访问量:43
合并不同长度的元组列表列表
Combine list of lists of tuples with different lengths
问:
我在合并元组列表列表时遇到问题,主要问题来自这些元组的不同大小。我也在尝试以“pythonic”的方式去做,这并不容易。
我实际上拥有的是一个对象列表,其坐标以元组形式给出。 对象(比如说:线)的起点和终点总是为 (x1,y1) 和 (x2,y2),它们通常也有一些“路径”。问题在于“路径”有时是空的,并且通常路径上的点数是不同的。
start=[ (3,5), (23,50), (5,12), (51,33), (43,1)]
end = [(23,19), (7,2), (34,4), (8,30), (20,10)]
path=[[(10,7),(14,9),(18,15)],
[],
[(15,7)],
[(42,32),(20,31)],
[(30,7)]]
预期结果应如下所示:
whole_path = [[(3,5),(10,7),(14,9),(18,15),(23,19)],
[(23,50),(7,2)],
[(5,12),(15,7),(34,4)],
[(51,33),(42,32),(20,31),(8,30)],
[(43,1),(30,7),(20,10)]]
我正在尝试使用 zip - 它适用于开始/结束/路径列表中类似大小的项目,但不适用于它们的差异。
有前途的解决方案可能会随使用和提供,但我无法让它起作用,还有一个选项可以将其放入两个循环中,但它看起来不太好,而且......它不是很“蟒蛇”。
所以:任何建议都会很好。path.insert(0,start)
path.extend([end])
答:
0赞
slothrop
6/3/2023
#1
带有可变长度路径元素的解包和解包是相当干净的:zip
*
from pprint import pprint
start=[ (3,5), (23,50), (5,12), (51,33), (43,1)]
end = [(23,19), (7,2), (34,4), (8,30), (20,10)]
path=[[(10,7),(14,9),(18,15)],
[],
[(15,7)],
[(42,32),(20,31)],
[(30,7)]]
whole_path = [[s, *p, e] for s, p, e in zip(start, path, end)]
pprint(whole_path)
提供所需的:
[[(3, 5), (10, 7), (14, 9), (18, 15), (23, 19)],
[(23, 50), (7, 2)],
[(5, 12), (15, 7), (34, 4)],
[(51, 33), (42, 32), (20, 31), (8, 30)],
[(43, 1), (30, 7), (20, 10)]]
评论
0赞
svn
6/3/2023
谢谢!这是我一直在寻找的完美解决方案,简单而“蟒蛇”!我知道有像 *p 这样的东西可以用来“解压缩”数据,但我从未使用过这种语法。
评论