Уведомления

Группа в Telegram: @pythonsu

#1 Март 7, 2012 16:46:47

avigmati
От:
Зарегистрирован: 2012-03-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

нужна помощь в обработке списка списков

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]]
]
как разобрать все кластеры (напрмер [, ] - кластер) в которых есть хотя бы один общий элемент ( или )?
например [, ], [, ], [, ] имеют общие элементы и должны быть собраны в отдельный список:
[ [, ], [, ], [, ] ]



Отредактировано (Март 7, 2012 16:50:46)

Офлайн

#2 Март 7, 2012 19:32:19

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

нужна помощь в обработке списка списков

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)

Офлайн

#3 Март 7, 2012 20:00:14

avigmati
От:
Зарегистрирован: 2012-03-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

нужна помощь в обработке списка списков

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]
[ [[...], [...]],
[[...], [...]],
[[...], [...]] ]
]



Отредактировано (Март 7, 2012 20:11:46)

Офлайн

#4 Март 7, 2012 23:07:42

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

нужна помощь в обработке списка списков

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
Скорее всего можно переписать и по-красивее ))

Офлайн

#5 Март 8, 2012 19:24:42

avigmati
От:
Зарегистрирован: 2012-03-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

нужна помощь в обработке списка списков

спасибо за помощь, все работает как надо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version