Найти - Пользователи
Полная версия: нужна помощь в обработке списка списков
Начало » Центр помощи » нужна помощь в обработке списка списков
1
avigmati
clusters = [
[[1, 1], [1, 2]],
[[0, 2], [1, 1]],
[[1, 2], [2, 1]],
[[3, 2], [3, 0]], [[0, 4], [1, 3]], [[2, 4], [3, 5]], [[4, 5], [4, 3]], [[2, 7], [2, 5]], [[0, 8], [0, 6]], [[1, 8], [1, 6]], [[2, 8], [2, 6]], [[3, 8], [3, 6]]
]
как разобрать все кластеры (напрмер [, ] - кластер) в которых есть хотя бы один общий элемент ( или )?
например [, ], [, ], [, ] имеют общие элементы и должны быть собраны в отдельный список:
[ [, ], [, ], [, ] ]
s0rg
clusters = [[[1, 1], [1, 2]], [[0, 2], [1, 1]], [[1, 2], [2, 1]],
[[3, 2], [3, 0]], [[0, 4], [1, 3]], [[2, 4], [3, 5]],
[[4, 5], [4, 3]], [[2, 7], [2, 5]], [[0, 8], [0, 6]],
[[1, 8], [1, 6]], [[2, 8], [2, 6]], [[3, 8], [3, 6]], ]

def cluster_filter(cluster):
a, b = cluster
return len(set(a) & set(b))

print filter(cluster_filter, clusters)
avigmati
s0rg
результат вашей программы:
[
[[1, 1], [1, 2]], [[1, 2], [2, 1]], [[3, 2], [3, 0]],
[[4, 5], [4, 3]], [[2, 7], [2, 5]], [[0, 8], [0, 6]],
[[1, 8], [1, 6]], [[2, 8], [2, 6]], [[3, 8], [3, 6]]
]
а надо:
[
[ [[1, 1], [1, 2]],
[[0, 2], [1, 1]],
[[1, 2], [2, 1]] ],
# связующие элементы [1,1] и [1,2]
[ [[...], [...]],
[[...], [...]],
[[...], [...]] ]
]
s0rg
def cluster_grouper(clusters):
grouped = []
result = []

for cls in clusters:
if cls in grouped:
continue
grouped.append(cls)
groups = [cls,]
a, b = cls
for ccls in clusters:
if (ccls not in grouped) and (a in ccls or b in ccls):
grouped.append(ccls)
groups.append(ccls)
result.append(groups)
return result
Скорее всего можно переписать и по-красивее ))
avigmati
спасибо за помощь, все работает как надо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB