Форум сайта python.su
В списках начальном и конечном отличаются только последние элементы.
Т.е. в наличии несколько строк с одинаковыми элементами, где только последние элементы различаются.
Необходимо привести список списков к такому виду, чтобы те элементы которые отличаются были добавлены в 1 отдельный список.. те, которые совпадают - схлопнулись в 1, результирующий.
# [ # [elem1, ... comment11] # [elem1, ... comment12] # ... # [elem2, ... comment21] # ... # ] # [ # [elem1, ... [comment11, comment12]] # [elem2, ... [comment21, ...]] # ... # ]
Офлайн
set().intersection()
Офлайн
FishHook
set().intersection()
>>> a = [1,2,3,4,6] >>> b = [1,2,3,4,8] >>> c = [0,1,2,3,5] >>> d = [0,1,2,3,8] >>> res = [] >>> res.append(a) >>> res.append(b) >>> res.append(c) >>> res.append(d)
Отредактировано ks (Дек. 2, 2013 10:57:56)
Офлайн
Легко, только сначала Вы покажите, что должно получиться в итоге на том же самом примере.
Офлайн
from collections import defaultdict d = defaultdict(set) for (i, *x) in res: d[i] = d[i].union(set(x)) print(d)
defaultdict(<class 'set'>,{ 0: {1, 2, 3, 5, 8}, 1: {2, 3, 4, 6, 8} })
Офлайн
Как-то так можно:
from itertools import groupby from operator import itemgetter a = [1,2,3,4,6] b = [1,2,3,4,8] c = [0,1,2,3,5] d = [0,1,2,3,8] tmp = ((x[:-1], x[-1]) for x in (a, b, c, d)) for k, g in groupby(tmp, itemgetter(0)): k.append([x[-1] for x in g]) print(k)
Отредактировано pyuser (Дек. 2, 2013 12:58:04)
Офлайн
from itertools import groupby data = [ [1,2,3,4,8], [1,2,3,4,6], [0,1,2,3,5], [0,1,2,3,8] ] def keyfunc(x): return x[:-1] data.sort() res = [] for k, g in groupby(data, keyfunc): k.append([x[-1] for x in g]) res.append(k) print res
Офлайн