对列表中的元素进行分组
Grouping elements in a list
我正在努力在任何图像上加入虚线。我已经提取并过滤了数据样本。
这是我的输入数据。在此字典中,键“0”和“1”表示 x 坐标,列表(值)表示相应 x 坐标的不同 y 坐标。
在不同y坐标的列表中,我想创建一个子列表并存储所有两个连续元素之间的差异小于35的元素。如果两个元素之间的差异超过35,那么我想创建一个新的子列表并对下一个连续元素重复相同的操作。
data = {0: [177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651, 753, 761, 776], 1: [477, 489, 490]}
所以输出看起来像这样。
data = {0: [[177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651], [753, 761, 776]], 1: [[477, 489, 490]]}
我怎样才能达到预期的输出?
对于一维“分组”:
def groupwhile(xs, key):
group = []
xs = sorted(xs)
it = iter(xs)
group.append(next(it))
for x in it:
if key(group[-1], x):
group.append(x)
else:
yield group
group = [x]
yield group
>>> dist_10 = lambda a, b: abs(a - b) <= 10
>>> list(groupwhile([0, 7, 18, 19], key=dist_10))
[[0, 7], [18, 19]]
对于 2D 分组,您需要一些更高级的东西来获得高效的算法。既然你提到你正在处理图像,请尝试沿着图像形态学、floodfills、分水岭或聚类的方向。
我正在努力在任何图像上加入虚线。我已经提取并过滤了数据样本。
这是我的输入数据。在此字典中,键“0”和“1”表示 x 坐标,列表(值)表示相应 x 坐标的不同 y 坐标。
在不同y坐标的列表中,我想创建一个子列表并存储所有两个连续元素之间的差异小于35的元素。如果两个元素之间的差异超过35,那么我想创建一个新的子列表并对下一个连续元素重复相同的操作。
data = {0: [177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651, 753, 761, 776], 1: [477, 489, 490]}
所以输出看起来像这样。
data = {0: [[177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651], [753, 761, 776]], 1: [[477, 489, 490]]}
我怎样才能达到预期的输出?
对于一维“分组”:
def groupwhile(xs, key):
group = []
xs = sorted(xs)
it = iter(xs)
group.append(next(it))
for x in it:
if key(group[-1], x):
group.append(x)
else:
yield group
group = [x]
yield group
>>> dist_10 = lambda a, b: abs(a - b) <= 10
>>> list(groupwhile([0, 7, 18, 19], key=dist_10))
[[0, 7], [18, 19]]
对于 2D 分组,您需要一些更高级的东西来获得高效的算法。既然你提到你正在处理图像,请尝试沿着图像形态学、floodfills、分水岭或聚类的方向。