Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2021, 14:13   #1
DiMaggio
Новичок
Джуниор
 
Регистрация: 11.05.2021
Сообщений: 1
По умолчанию Вычислить сумму элементов списка, расположенных между первым и вторым отрицательными элементами.

Всем доброго времени суток!
Нужна ваша помощь.
Такая вот задача: В списке, состоящем из вещественных элементов, вычислить:
1) номер минимального элемента списка;
2) сумму элементов списка, расположенных между первым и вторым отрицательными элементами.
Преобразовать список таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом - все остальные.

Первый пункт выполнил, а вот второй и преобразование списка не могу никак осилить.
Буду как всегда благодарен за помощь)
Вот, кстати как начал:
Код:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
import sys
 
if __name__ == '__main__':
    a = list(map(float, input().split()))
    print("Индекс минимального элемента:", a.index(min(a)))
DiMaggio вне форума Ответить с цитированием
Старый 22.05.2021, 11:18   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

1. Такой поиск индекса будет быстрее.
Код:
idx = min(range(len(a)), key=lambda i:a[i])
2. Тут условие неполное. Что делать, если отрицательных нет? Если только один?
Я тут использую функцию, чтобы выделить все вычисления и удобно прекращать обработку через return.
Код:
def get_sum_range(a):
  first_neg_idx = None
  second_neg_ids = None
  for (idx, v) in enumerate(a):
    if v >= 0.0:
      continue  # Переходим к следующему
    # Тут v уже отрицательный
    if first_neg_idx is None:
       first_neg_idx = idx
       continue
    if second_neg_idx is None:
       second_neg_idx = idx
       break  # Нет смысла дальше изучать список
  if first_neg_idx is None or second_neg_idx is None:
     return 0.0 # Возвращаю 0, если количество отрицательных меньше 2
  return sum(a[first_neg_idx+1:second_neg_idx-1])
3. Тут можно сделать 2 способами.
3.1 По идее, эффективнее (сложность O(n)):
Код:
a = [x for x in a if abs(x)<=1.0] + [x for x in a if abs(x)>1.0]
3.2 Через сортировку (сложность до O(nlogn)):
Код:
a.sort(key=lambda x: int(abs(x)>1.0))
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами. Алия13 Помощь студентам 7 18.12.2016 16:08
Вычислить разницу элементов массива, что расположены между первым отрицательным та вторым положительным элементами AlexQQ Помощь студентам 0 29.05.2013 19:38
найти сумму элементов массива,расположенных между первым и вторым отрицательными элементами Кристюша5 Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2012 16:06
Найти сумму элементов между первым и вторым отрицательным элементами. Что у меня неправильно? GreenMan Паскаль, Turbo Pascal, PascalABC.NET 2 26.02.2012 13:59
Вычислить сумму элементов массива, расположенных между первым и последним положительными элементами Fitch573 Помощь студентам 4 09.01.2012 18:04