Объединение всех подсписков, если есть дублирующее значение, при удалении всех дубликатов - PullRequest
0 голосов
/ 04 июля 2019

Предположим, у меня есть список списков:

lists = [
    [1, 2, 5, 7],
    [3, 6, 8, 10],
    [2, 7, 9, 11]
]

Я хочу объединить их (индекс от наименьшего к наибольшему), если они имеют пересекающееся значение, не копируя дубликаты, чтобывывод выглядит следующим образом:

new_lists = [
    [1, 2, 5, 7, 9, 11],
    [3, 6, 8, 10],
]

Как мне управлять этим для большого количества списков , в то время как относительно эффективно?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Итак, вот подход Python 2.7, похожий на мой комментарий выше:

lists = [
    [1, 2, 5, 7, 13],
    [3, 6, 8, 10, 13],
    [2, 7, 9, 11]
]

thedict = {}
for sublist in lists:
    for el in sublist:
        thedict[el] = 1

keylist = thedict.keys()

# at this point, you have one merged list:

print str(keylist)

# You might want to sort it, as key order is not assured

keylist.sort()

# if you want smaller lists, then you can do something like this:

listsize = 5
outlistoflists = []
for i in range(0, len(keylist), listsize):
    sublist = keylist[i:i + listsize]
    outlistoflists.append(sublist)

print str(outlistoflists)
0 голосов
/ 05 июля 2019

попробуйте это:

lists = [
    [1, 2, 5, 7],
    [3, 6, 8, 10],
    [2, 7, 9, 11]
]

newlist=[]
for sublist in lists:
    r=sublist[-1]
    i=1
    for sublist_ in lists[i:]:
        if r in sublist_:
            lists.remove(sublist_)
            sublist.extend(sublist_[sublist_.index(r)+1:])
            newlist.append(sublist)
    i=i+1
print([list(i) for i in set(map(tuple, newlist))])

вывод

[[1, 2, 5, 7, 9, 11], [3, 6, 8, 10]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...