Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
There are numerous ways to initialize the list with the elements, but sometimes, its required to initialize the lists with the numbers in a sliced way and find its summation. This can be custom and hence knowledge of this can come handy. Let’s discuss certain ways in which this can be done.
Method #1 : Using list comprehension + enumerate() + sum() The list comprehension can do the possible iteration part and enumerate can help in the part of logic and checking for the valid elements required in the list. The sum() is used to perform summation.
Python3
test_list
=
list
(
range
(
50
))
print
("The original
list
is
: "
+
str
(test_list))
N
=
5
K
=
15
res
=
sum
([i
for
j, i
in
enumerate
(test_list)
if
j
%
K < N ])
print
("The modified
range
sum
list
: "
+
str
(res))
Output :
The original list is : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] The modified range sum list : 490
Time Complexity: O(n) where n is the number of elements in the list “test_list”. The list comprehension + enumerate() + sum() is used to perform the task and it takes O(n) time.
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the list “test_list”.
Method #2 : Using itertools.compress() + itertools.cycle() + sum() The above two function can combine to facilitate the solution of the discussed problem. The cycle function can to the task of repetition and the compress function can be beneficial when it comes to clubbing the segments together. The sum() is used to perform summation.
Python3
from
itertools
import
compress, cycle
test_list
=
list
(
range
(
50
))
print
("The original
list
is
: "
+
str
(test_list))
N
=
5
K
=
15
func
=
cycle([
True
]
*
N
+
[
False
]
*
(K
-
N))
res
=
sum
(
list
(compress(test_list, func)))
print
("The modified
range
sum
list
: "
+
str
(res))
Output :
The original list is : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] The modified range sum list : 490
Time Complexity: O(n*n), where n is the number of elements in the list “test_list”.
Auxiliary Space: O(1), constant extra space is required
Last Updated :
07 May, 2023
Like Article
Save Article
This was the question:
Write a function called sum_range that accepts 2 integer values as
parameters and returns the sum of all the integers between the two
values, including the first and last values. The parameters may be in
any order (i.e. the second parameter may be smaller than the first).
For example:result = sum_range(1, 1)
print(result) 1result = sum_range(2, 4) print(result) 9
result = sum_range(3, 2)
print(result) 5
my codes are as below, I dont know where it went wrong
but when I test the codes, it returned ‘none’ when (2,4) (3,2) were entered
def sum_range(x,y):
if x == y:
return x
if x<y:
sum(range(x,y))
return
if x>y:
sum(range(y,x))
return
asked Jul 31, 2014 at 10:50
7
You could do better (at least I think), here is my code for that:
def sum_range(a, b):
return sum(range(min(a,b),max(a,b)+1))
answered Jul 31, 2014 at 10:58
ex0nsex0ns
1,1168 silver badges18 bronze badges
1
You were very close but forgot to return the actual value from the calculations. If you just type «return», you will return None and not the result from the sum.
You also did not include the last number in the range in the sum. See corrected code below:
def sum_range(x, y):
if x == y:
return x
if x < y:
return sum(range(x, y+1))
if x > y:
return sum(range(y, x+1))
answered Jul 31, 2014 at 10:57
4
You need to return the sum which you are not doing in the x<y
and x>y
cases. You should
return sum(range(x,y))
or return sum(range(y,x))
as appropriate.
Note also that there is a bug in your range()
expressions — «including the first and last values». Hint: What does range(1,3)
output?
answered Jul 31, 2014 at 10:58
mhawkemhawke
83.9k9 gold badges115 silver badges136 bronze badges
def sum_range(x,y):
if x == y:
return x
elif x < y:
s = 0
for i in range(x,y):
s += x+(x+1)
return s
elif x > y:
s = 0
for i in range(y,x):
s += y+(y+1)
return s
This is done without using sum() function.
answered Jul 31, 2014 at 11:14
SeshaSesha
2021 silver badge5 bronze badges
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
1 |
|
Пересекающиеся интервалы22.10.2020, 13:05. Показов 12145. Ответов 22
Добрый день!
0 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
22.10.2020, 13:07 |
2 |
что значит интервалы?
0 |
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
22.10.2020, 13:24 [ТС] |
3 |
[1, 3], [2, 5], [6, 8] — интервалы. Как видно, [1, 3] пересекается с [2, 5]. Лучше представить целые числа на оси Х.
0 |
Fudthhh Модератор 2869 / 1572 / 508 Регистрация: 21.02.2017 Сообщений: 4,197 Записей в блоге: 1 |
||||
22.10.2020, 13:27 |
4 |
|||
Решение
Добавлено через 24 секунды
1 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
22.10.2020, 13:28 |
5 |
алгоритмом заметающей прямой
1 |
SW Developer 97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
||||||||
22.10.2020, 13:53 [ТС] |
6 |
|||||||
DmFat, спасибо!
надо изменить на
0 |
1303 / 843 / 409 Регистрация: 12.03.2018 Сообщений: 2,305 |
|
22.10.2020, 13:56 |
7 |
SW Developer, list.sort()
2 |
Модератор 2869 / 1572 / 508 Регистрация: 21.02.2017 Сообщений: 4,197 Записей в блоге: 1 |
|
22.10.2020, 13:58 |
8 |
SW Developer, Тогда ты создашь новый список, а исходный список останется не отсортированым, немного поправил, глянь
0 |
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
22.10.2020, 14:04 [ТС] |
9 |
DmFat, да я уже понял разницу этих двух функций. Еще раз спасибо! В моем случае — лучше sorted().
0 |
Fudthhh Модератор 2869 / 1572 / 508 Регистрация: 21.02.2017 Сообщений: 4,197 Записей в блоге: 1 |
||||
22.10.2020, 14:16 |
10 |
|||
РешениеSW Developer, не учел что некоторые интервалы могут пересекаться с несколькими интервалами:
1 |
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
22.10.2020, 14:29 [ТС] |
11 |
DmFat, вот и я сейчас на отладке заметил. ) Добавлено через 4 минуты
0 |
Модератор 2869 / 1572 / 508 Регистрация: 21.02.2017 Сообщений: 4,197 Записей в блоге: 1 |
|
22.10.2020, 14:31 |
12 |
SW Developer, то бишь [1, 3] и [2, 4], тоже самое что [2, 4] и [1, 3]
0 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
22.10.2020, 14:32 |
13 |
не учел что некоторые интервалы это будет O(n*log(n)) ? Думаю тут «квадрат».
Пересекающиеся интервалы должны учитываться только один раз Вы напишите полное задание.
0 |
SW Developer 97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
||||||||||||
22.10.2020, 14:45 [ТС] |
14 |
|||||||||||
Для этого и нужна сортировка? Добавлено через 2 минуты
Вы напишите полное задание. Все писать не буду, интересует только эта часть: Добавлено через 4 минуты
, Добавлено через 6 минут
вместо
? Где sum_interval — сумма всех длин интервалов.
0 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
22.10.2020, 14:47 |
15 |
Проще говоря нужно найти сумму длин всех интервалов после объединения
0 |
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
22.10.2020, 14:53 [ТС] |
16 |
Проще говоря нужно найти сумму длин всех интервалов после объединения Получается, нужно создать новый список и в нем уже производить суммирование?
0 |
Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
|
22.10.2020, 14:56 |
17 |
лучше стек Добавлено через 1 минуту
0 |
7256 / 4045 / 1780 Регистрация: 27.03.2020 Сообщений: 6,871 |
|
22.10.2020, 15:41 |
18 |
1 |
97 / 93 / 81 Регистрация: 10.01.2016 Сообщений: 662 Записей в блоге: 13 |
|
22.10.2020, 16:10 [ТС] |
19 |
eaa,
Проще говоря нужно найти сумму длин всех интервалов после объединения — вы правы. Добавлено через 1 минуту
0 |
eaa Status 418 3841 / 2125 / 568 Регистрация: 26.11.2017 Сообщений: 4,987 Записей в блоге: 2 |
||||
22.10.2020, 16:22 |
20 |
|||
Решение
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
22.10.2020, 16:22 |
20 |
src/solution.py
Реализуйте функцию sum_of_intervals()
, которая принимает на вход список интервалов и возвращает сумму всех длин интервалов. В данной задаче используются только интервалы целых положительных чисел, которые представлены в виде списков. Первое значение интервала всегда будет меньше, чем второе значение. Например, длина интервала [1, 5] равна 4, а длина интервала [5, 5] равна 0. Пересекающиеся интервалы должны учитываться только один раз.
from solution import sum_of_intervals
sum_of_intervals([
[1, 1],
])
# 0
sum_of_intervals([
[1, 2],
[50, 100],
[60, 70],
])
# 51
sum_of_intervals([
[1, 2],
[5, 10],
])
# 6
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Получить доступ
Перейти к содержимому
Меню
Сумма диапазона чисел
Напишите функцию, которая будет принимать начальное и конечное число в диапазоне чисел и возвращать сумму всех чисел этого диапазона.
Примеры
sum_problem(-10, 1) ➞ -54 sum_problem(-20, 5) ➞ -195 sum_problem(90, 45) ➞ 3105
Варианты решения
def sum_problem(a, b): return sum(range(min(a, b), max(a, b) + 1)) 7
def sum_problem(a, b): return (a + b) * (abs(a - b) + 1) // 2