2016-08-09 7 views
3

я использовал интервалы модуля (http://pyinterval.readthedocs.io/en/latest/index.html)Как объединить целые числа в python?

и создал интервал из набора или начало, конец кортежи:

intervals = interval.interval([1,8], [7,10], [15,20]) 

, которые приводят к интервалу ([1,0, 10,0], [15,0, 20,0 ]), поскольку [1,8] и [7,10] перекрываются.

Но этот модуль интерпретирует значения пар как действительные числа, поэтому два непрерывных интервала в целых числах не будут объединены.

Пример:

intervals = interval.interval([1,8], [9,10], [11,20]) 

приводит: интервал ([1,0, 8,0], [9,0, 10,0], [11.0, 20.0])

Мой вопрос, как я могу присоединиться к этому промежутки времени, целые числа, а не как действительные числа? И в последнем примере результат будет интервал ([1,0, 20,0])

+0

Не обязательно, вы не видите '[8,9]' и '[10,11]'. Для перекрытия интервалов вам нужна зона пересечения или точка. – karakfa

+0

Я думал, что мой вопрос достаточно ясен, им нужен способ присоединиться к дискретным интервалам, основанным на натуральных числах, а не действительных числах –

ответ

1

Модуль интервалов pyinterval используется для действительных чисел, а не для целых чисел. Если вы хотите использовать объекты, вы можете создать интервальный класс целого, или вы можете также код программы, чтобы присоединиться целыми интервалы с помощью модуля интервала:

def join_int_intervlas(int1, int2): 
    if int(int1[-1][-1])+1 >= int(int2[-1][0]): 
     return interval.interval([int1[-1][0], int2[-1][-1]]) 
    else: 
     return interval.interval() 
+0

Что такое объекты int1, int2? Я не понимаю int1 [-1] [- 1] или int2 [-1] [0]. Вы пытаетесь получить доступ к последней позиции первого элемента в int1 и первой позиции последнего элемента в int2? И если да, то в чем смысл? –

+0

int1 и int2 - интервалы. Вы пытаетесь объединить два целых интервала. int [-1] [- 1] - это последнее число интервала. и [-1] [0] - первый элемент интервала. Я пытаюсь «соединить» целые интервалы. Pyinterval - это числовые модули, поэтому, если вы хотите соединить два целых интервала, вы должны вычесть десятичную разницу (от 8.1 до 8.999) между последним числом первого интервала и последним, поэтому я суммирую +1. Это временное решение для целых чисел. –

+0

Теперь я понимаю, что int1 и int2 являются интервалами от pyintervals. благодаря –

0

я придумал следующую программу:

ls = [[1,8], [7,10], [15,20]] 
ls2 = [] 
prevList = ls[0] 
for lists in ls[1:]: 
    if lists[0] <= prevList[1]+1: 
     prevList = [prevList[0], lists[1]] 
    else: 
     ls2.append(prevList) 
     prevList = lists 
ls2.append(prevList) 

print ls2 # prints [[1, 10], [15, 20]] 

Он переставляет через все списки и проверки, если firsy элемент каждого списка меньше или равно предыдущему элементу + 1. Если это так, он объединяет два.

+0

Да, он работает над уже созданным интервальным объектом с отсортированными интервалами, это будет два шага , потому что я мог бы столкнуться с действительно большим количеством интервалов, так что им понадобится еще финтервалы, спасибо –

0

Я считаю, вы можете использовать pyintervals для целых интервалов также путем добавления interval([-0.5, 0.5]) , В вашем примере вы получите

In[40]: interval([1,8], [9,10], [11,20]) + interval([-0.5, 0.5]) 
Out[40]: interval([0.5, 20.5]) 

 Смежные вопросы

  • Нет связанных вопросов^_^