Как найти 2 одинаковых количества элементов списка - PullRequest
0 голосов
/ 18 января 2020

Мне нужно найти 2 одинаковых наибольших количества элементов в списке и показать значение

пример:

[1, 2, 3, 6] => (1+2+3, 6) => 6

[1, 2, 2, 4, 5, 6] => (1+2+2+5, 4+6) => 10

[1, 2] => can't find same ammounts => 0

Я понятия не имею, как это сделать.

1 Ответ

1 голос
/ 18 января 2020

Это дает вам разделы элементов, которые составляют до половины суммы всех элементов во входном списке, упорядоченные по убыванию разницы длины между двумя разделами:

import itertools as it


def partitions(lst):
    s = sum(lst)
    half_s = s // 2
    if half_s*2 != s:
        raise ValueError(f"Impossible to split the sum {s} evenly")

    combs_all = (it.combinations(lst, k) for k in range(len(lst)))
    combs_poss = (c for ck in combs_all for c in ck if sum(c) == half_s)

    combs_res = []
    for a,b in it.combinations(combs_poss, 2):
        if not set(a).intersection(b):
            combs_res.append([a, b])

    return sorted(combs_res, key=lambda tc: abs(len(tc[0])-len(tc[1])))


l1 = [1,2,3,6]
l2 = [1,2,2,4,5,6]
l3 = [1,2,1,4,4,5,3,2]

print(partitions(l1))
print(partitions(l2))
print(partitions(l3))

, что приводит к:

[[(6,), (1, 2, 3)]]
[[(1, 4, 5), (2, 2, 6)], [(4, 6), (1, 2, 2, 5)]]
[[(4, 4, 3), (1, 2, 1, 5, 2)]]

Вы можете выбрать понравившийся элемент, например, первый

partitions(l2)[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...