Если данные значения всегда идут последовательно, с увеличением этого идентификатора, как в примере (т.е. 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) и перед вставкой новой партии проверять на вхождение в множество.