Python: создавать для -l oop до совпадения двух списков - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь сопоставить два списка, пока они не совпадут:

Итак, допустим, у меня есть

bought = [12, 10, 5]

sold = [4, 6, 3, 2, 12]

В конце концов Я хочу создать for-l oop для обоих списков, который продолжает цикл, пока все числа не совпадут. Таким образом, он находит все текущие совпадения и продолжает создавать разбиения для чисел, которые не совпадают

. В приведенном выше примере он будет начинаться с 12, являющегося совпадением для обоих списков. Тогда есть 10, которое не соответствует ничему, но ближайший элемент в другом списке равен 6, оставляя позади 4, что также совпадает с другим списком.

Вышеуказанное в конечном итоге станет

result = [12, 6, 4, 3, 2]

Мне было интересно, есть ли такая функция Python, как intersections, которая может помочь сделать это эффективно?

Правила: 1. Сумма двух списков всегда равна

1 Ответ

0 голосов
/ 20 февраля 2020

Если я правильно понял, вам нужно разложить каждый элемент b из bought на элементы s1, s2... из sold с условием b = s1 + s2 .... Для этого я предлагаю использовать комбинации. Я буду перечислять все комбинации, которые я могу сделать с элементами sold, например [4], [6,3], [4,2,12]... etc, пока сумма не будет соответствовать элементу из bought.

Для вашего примера, 12 соответствует 12 10 с 6+4 и 5 с 3+2. Если бы у вас было 11, оно совпадало бы с 6+3+2.

from itertools import combinations

bought = [12, 10, 5]
sold = [4, 6, 3, 2, 12]
sold = sorted(sold, reverse=True)

result = []
for b in bought:
    stop = False
    for i in range(1, len(sold)+1):
        for c in combinations(sold, i):
            if sum(c) == b:
                result += (c)
                stop = True
                break
        if stop:
            break

print(result)
# [12, 6, 4, 3, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...