Задать вопрос
3Create
@3Create

Каким образом отсеивать данные массива с одинаковым первым элементом?

Салют! Каким образом можно отсеивать по первому элементу ?
Передаются данные массива на переменную в каждом цикле:
[[1016, '2', 141, 0], [1017, '2', 22341, 0], [1018, '2', 1109, 0], [1019, '2', 517, 0], [1020, '2', 443, 0], [1021, '2', 1701, 0], [1022, '2', 1604, 0], [1023, '2', 295, 0]]

[[1021, '2', 1701, 0], [1022, '2', 1604, 0], [1023, '2', 295, 0], [1027, '2', 1933, 0], [1029, '2', 398, 0]]

#....и так далее

В первом цикле значение первого элемента 1021, 1022, 1023 совпадают со значениями со второго цикла. Как можно их игнорировать?
Записать в csv таблицу и в каждом цикле ее поднимать и сравнивать?
Был бы признателен за пример :)
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@o5a
Если данные значения всегда идут последовательно, с увеличением этого идентификатора, как в примере (т.е. 106...1021,1022,1023...), то проще при каждом занесении набора данных запоминать в переменную последний номер, а при следующем занесении пропускать все, <= этому номеру.
# тестовые данные, 2 загрузки
d1 = [[1016, '2', 141, 0], [1017, '2', 22341, 0], [1018, '2', 1109, 0], [1019, '2', 517, 0], [1020, '2', 443, 0], [1021, '2', 1701, 0], [1022, '2', 1604, 0], [1023, '2', 295, 0]]
d2 = [[1021, '2', 1701, 0], [1022, '2', 1604, 0], [1023, '2', 295, 0], [1027, '2', 1933, 0], [1029, '2', 398, 0]]
load_data = [d1, d2]

all_data = []
last_id = 0
for data in load_data:
    for row in data:
        if row[0] > last_id:
            all_data.append(row)
    last_id = row[0]

Если идентификаторы всегда строго увеличиваются на 1, то можно еще более оптимизировать, сразу начав выборку с нужной позиции следующих данных (зная last_id и 1-й id в новой партии данных, сразу можем вычислить, с какого элемента делать загрузку).

Если же такой зависимости нет, то можно заносить идентификаторы в множество (set) и перед вставкой новой партии проверять на вхождение в множество.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы