Loading...
s_antonov avatar s_antonov 1 Точки

Python - логически условия за задаване на интервали

sorted_datalines = [-640, -547, -414, -313, -182, -181, 441, 622, 679, 782, 889]

Привет,

Решавам малко по-сложна за мен задачка свързана с интервали, не давам моето решение защото то не работи в случаите когато един интервал съдържа две или повече цифри  - накратко сортиран лист с положителни и отрицателни integers. Идеята е да се мине през всеки и да отвари интервал, съответно затваря интервала когато не открие поредност и преминава на следващия. Корекния output трябва да бъде:

[-640, -640], [-547, -547], [-414, -414], [-313, -313], [-182, -181], [441, 441], [622, 622], [782, 782], [889, 889]

Пробвах дирекно с loop да насипя резултатите в матрица и работи до момента в който стигне до -182 където дава като интервали:

...[-182, -182], [-182, -181]...

Не съм си избистрил логиката как да задам логическите ограничения, но понеже е сортиран лист би трябвало да се следи за наличие на поредност в предходната цифра. Също май не трябва ползвам матрица преди да знам къде започва и свършват интервалите. Малко зациклих, предложения?

Пример: For the input: 

123
567
124
568
-100
-99

The output should be:

[-100, -99] with consecutive count of 2
[123, 124] with consecutive count of 2
[567, 568] with consecutive count of 2

 

Тагове:
0
Programming Fundamentals
andrey_bg avatar andrey_bg 4 Точки
Здравей, не знам как е точно условието за вход и изход, но с този код си получаваш изхода :) Ако изпратиш цялото условие на задачата, мога да го редактирам :)
nums=sorted([int(val) for val in input().split()]) 
res=[] 
diff=0 
for i,val in enumerate(nums):
    if res==[]:
        res.append([val,val])
    elif nums[i]!=nums[i-1]+1:
        if i<len(nums)-1 and nums[i]!=nums[i+1]-1:
            res.append([val, val])
        elif i==len(nums)-1:
            res.append([val, val])
        else:
            res.append([val])
    else:
        res[i-diff-1].append(val)
        diff+=1

for i in res:
    print(i)

 

 

0
s_antonov avatar s_antonov 1 Точки

Аз добавих -182 за да се уверя, че работи. Мерси!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.