3Create
@3Create

Каким образом отсеивать данные массива с последовательными, но иногда повторяющимися данными в потоке?

Уже был подобный вопрос, но решение (@MinTnt) получилось для статических данных.
Типо так:
a = [[1001, 50], [1002, 50], [1003, 50], [1004, 50]]

b = [[1003, 60], [1004, 60], [1005, 50], [1006, 50]]

a = list({x[0]: x for x in a+b}.values())
с = sorted(a, key=lambda x: x[0])
print(с)


вот пример что приходит:
[[7119, 364.42, 0.1615, 0], [7120, 364.42, 0.0969, 0], [7121, 364.66, 0.8113, 0], [7122, 364.67, 5.4208, 0], [7128, 364.64, 2.9978, 0], [7129, 364.64, 0.1081, 0], [7130, 364.53, 0.4472, 0], [7132, 364.53, 4.0, 0], [7133, 364.53, 1.5, 0], [7134, 364.53, 1.5, 0], [7135, 364.53, 0.4719, 0], <b>[7136, 364.53, 0.4472, 0], [7137, 364.54, 0.4472, 0]</b>]
# Новое значение через 1 сек: #
[[7136, 364.53, 0.4472, 0], [7137, 364.54, 0.4472, 0], [7209, 365.12, 0.12, 0], [7210, 365.44, 3.3298, 0], [7211, 365.54, 4.5902, 0], [7212, 365.54, 2.3, 0], [7213, 365.54, 3.3418, 0], [7214, 365.55, 2.4082, 0]]
# Новое значение через 1 сек: #
......
# Новое значение через 1 сек: #
......
#и т.д.

Как видим эти значения ( [7136, 364.53, 0.4472, 0], [7137, 364.54, 0.4472, 0] ) есть в первых данных, и они же есть в след приходных данных.

Суть в том что через api появляются новые данные, которые обновляют переменную a
скажем каждую секунду. По идее мне нужно каким-то образом сохранить прошлое значение a, чтоб его прогнать через эту сортировку. Но как??? :)
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dmshar
Более запутано описать ваше пожелание наверное было-бы трудно.
Что означает "каким-то образом сохранить прошлое значение a, чтоб его прогнать через эту сортировку". Одно "прошлое"? Или каждое "прошлое"? Зачем его сохранять, если оно пришло, вы его "прогнали через сортировку" и пошли принимать следующее? У вас каждую секунду приходит один элемент массива a, или вот все четыре элемента и составляют единое "новое значение"? Вам надо сохранять значение a или результат сортировки?

В общем, если у вас поступают данные и вы их хотите сначала все накопить, а потом "прогнать через сортировку", то создавайте список, куда будете складывать свои поступающие значения, а потом, после накопления полного массива входных данных, циклом проходить по этому массиву и делать свою сортировку.
Если вы очень хотите обрабатывать данных по мере поступления, то - прочитали данные, отсортировали и в результирующий список поместили уже отсортированный результат в качестве.
Если же вы имели ввиду что-то другое, то сформулируйте свой вопрос более четко и однозначно.
Ответ написан
Viktor_T2
@Viktor_T2
python developer
result = []

prev = [[1001, 50], [1002, 50], [1003, 50], [1004, 50]]
next = [[1003, 60], [1004, 60], [1005, 50], [1004, 50]]

# преобразуем в кортежи (чтобы можно было преобразовать в множества)
prev_tuple = tuple(tuple(x) for x in prev)
next_tuple = tuple(tuple(x) for x in next)

# преобразуем в множество и вычитаеи множества
delta = set(next_tuple) - set(prev_tuple)

# обратно в список
delta = list(list(x) for x in delta)

print(delta)
# разницу в результат
result.extend(delta)

print(result)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы