Список арифметических последовательностей и накопительных сумм

У меня есть список времени (секунд), который выглядит так:

l = [2,4,6,8,2,4,6,8,10,30,60,30,60]
  • 2,4,6,8 — первый временной интервал.

  • 2,4,6,8,10 второй временной интервал.

  • 30,60 третий временной интервал.

  • 30,60 четвертый временной интервал.

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

l = [2,4,6,8,10,12,14,16,18,48,78,108,138]

По какому правилу группируется? Другими словами, откуда вы знаете, что группы не [(2,4,6,8), (2,4,6,8,10,30), (60), (30,60)] или [(2,4,6,8), (2,4,6,8), (10,30,60), (30,60)]?

Mark 17.06.2024 01:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать алгоритм для разбивки l на основе арифметических последовательностей, генерирования ожидаемого результата с помощью res += [res[-1] + prev_diff] и, наконец, построения графика результата:

import matplotlib.pyplot as plt


def _sequences(L):
    if len(L) < 3:
        return L
    start, parts = 0, []
    prev_diff = L[1] - L[0]
    D = {}
    j = 0
    res = [L[0]]
    for i in range(1, len(L)):
        curr_diff = L[i] - L[i - 1]
        if prev_diff != curr_diff:
            D[j] = prev_diff
            j += 1
            parts.append(L[start:i])
            start = i
            prev_diff = L[i + 1] - L[i] if i + 1 < len(L) else 0
        res += [res[-1] + prev_diff]
    parts.append(L[start:])
    D[j] = prev_diff
    return parts, D, res


L = [2, 4, 6, 8, 2, 4, 6, 8, 10, 30, 60, 30, 60]

parts, D, res = _sequences(L)

print(parts, D, res)

plt.plot(res, marker='o')
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True)
plt.show()



Принты

[[2, 4, 6, 8], [2, 4, 6, 8, 10], [30, 60], [30, 60]] {0: 2, 1: 2, 2: 30, 3: 30} [2, 4, 6, 8, 10, 12, 14, 16, 18, 48, 78, 108, 138]

Им дают список, который выглядит как l = [2,4,6,8,2,4,6,8,10,30,60,30,60], а не parts = [[2, 4, 6, 8], [2, 4, 6, 8, 10], [30, 60], [30, 60]] Похоже, вы проигнорировали главную проблему в вопросе.

Mark 17.06.2024 01:52
Ответ принят как подходящий

Код

сделать l серии панд s

import pandas as pd
l = [2,4,6,8,2,4,6,8,10,30,60,30,60]
s = pd.Series(l)

с

0      2
1      4
2      6
3      8
4      2
5      4
6      6
7      8
8     10
9     30
10    60
11    30
12    60
dtype: int64

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

grp = s.mul(2).eq(s.shift(-1)).cumsum()
out = s.add(grp.map(s.groupby(grp).max().cumsum().shift(fill_value=0))).tolist()

вне

[2, 4, 6, 8, 10, 12, 14, 16, 18, 48, 78, 108, 138]

Можете ли вы объяснить мне, как работают grp и out??

pankan 17.06.2024 14:18

Другие вопросы по теме

Как решить эту ошибку времени выполнения, которую я получаю в Python Pandas?
Назначьте каждый элемент списка строке кадра данных pandas последовательно и одинаково
Как извлечь подстроку из столбца в фрейме данных на основе столбца из другого фрейма данных?
Вывод Python DataFrame.info не отражает удаленные строки
Графическая карта не отображает данные GeoJSON правильно – возможная проблема с геометрией или картографированием
Не удалось преобразовать число с плавающей запятой 64 в число с плавающей запятой 32 в Python
Как получить несколько показателей для каждой категории в кросс-таблице панд?
Как очистить таблицу csv, содержащуюся внутри кнопки JavaScript, с помощью Python?
Функция модели ARMA для будущих невидимых данных с датами начала и окончания?
Я продолжаю получать ошибку «функция не повторяется» с фильтром Pandas DataFrame, но та же функция работает с применением. Что мне не хватает?