Как сделать функцию, которая может суммировать Интервалы во вложенный массив? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть упражнение для колледжа, и я до сих пор не могу решить это.(python)

Это моя проблема:

Напишите код функции с именем sumIntervals, которая принимает список пробелов и возвращает сумму длин пробелов.Внимание: перекрывающиеся интервалы должны измеряться только один раз.

Например:

sumIntervals([[1,2], [6, 10], [11, 15]])  # Returns 9

sumIntervals([[1,4], [7, 10], [3, 5]])  # Returns 7

sumIntervals ([[1,5], [10, 20], [1, 6], [16,19], [5,11]])  # Returns 19

Я сделал часть этого, но он не работает.

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Я бы сделал это так: по сути, то, что мы делаем здесь, это разделение этого входного списка на различные чанки, которые мы сохраняем как keyIndex, и далее мы запускаем второй цикл for, чтобы добавить разницу.из чисел в отдельности, поэтому [6,10] станет [6,7,8,9], чтобы представить разницу 10-6 = 4. Наконец, мы будем использовать метод set() только для удаления любых дубликатов, поскольку вы сказали, что хотите, чтобы перекрытие учитывалосьтолько один.

myList = ([[1,5], [10, 20], [1, 6], [16,19], [5,11]])

def sumIntervals(inputList):
    output = []

    for keyIndex in range(len(inputList)):
        for keyDifference in range(inputList[keyIndex][0], inputList[keyIndex][1]):
            output.append(keyDifference)

    output = set(output)
    print(len(output))

sumIntervals(myList)
0 голосов
/ 17 февраля 2019

Вы можете использовать набор (или дикт) для решения главной задачи: избежать двойного счета, вызванного перекрытиями.Например:

def sum_intervals(intervals):
    return len(set(
        i
        for a, b in intervals
        for i in range(a, b)
    ))

tests = (
    [[1,2], [6, 10], [11, 15]],
    [[1,4], [7, 10], [3, 5]],
    [[1,5], [10, 20], [1, 6], [16,19], [5,11]],
)

for t in tests:
    print(sum_intervals(t))  # 9  7  19
0 голосов
/ 17 февраля 2019
p = []
s = 0
for i in list1:
    p.append(i[1] - i[0])
set(p)
list(p)
for c in p:
    s = s + c

list1 - список, содержащий подинтервалы, а s - переменная, содержащая сумму

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