Объекты массива фильтров Python - PullRequest
0 голосов
/ 07 ноября 2018

Я получаю следующие данные из базы данных

EventTime UserID SubAddr

2018-05-04 16: 47: 56.000 113 1
2018-05-04 16: 48: 45.000 113 2
2018-05-04 16: 49: 17.000 113 1
2018-05-04 16: 49: 27.000 113 2
2018-05-04 16: 49: 48.000 113 1
2018-05-04 16: 49: 57.000 113 2
2018-05-04 16: 50: 15.000 113 1
2018-05-04 16: 51: 01.000 113 2
2018-05-04 16: 51: 23.000 113 1
2018-05-04 16: 51: 33.000 113 2
2018-05-07 15: 42: 13.000 114 1
2018-05-07 15: 42: 16.000 114 1
2018-05-07 15: 42: 26.000 114 1
2018-05-07 15: 42: 35.000 114 2
2018-05-07 15: 42: 43.000 114 2
2018-05-07 15: 42: 54.000 114 1
2018-05-07 15: 43: 02.000 114 1
2018-05-07 15: 43: 11.000 114 2
2018-05-07 15: 43: 20.000 114 2
2018-05-07 15: 43: 35.000 114 1
2018-05-07 15: 43: 42.000 114 1
2018-05-07 15: 43: 51.000 114 2
2018-05-07 15: 43: 58.000 114 2

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

EventTime UserID SubAddr

2018-05-04 16: 47: 56.000 113 1
2018-05-04 16: 48: 45.000 113 2
2018-05-04 16: 49: 17.000 113 1
2018-05-04 16: 49: 27.000 113 2
2018-05-04 16: 49: 48.000 113 1
2018-05-04 16: 49: 57.000 113 2
2018-05-04 16: 50: 15.000 113 1
2018-05-04 16: 51: 01.000 113 2
2018-05-04 16: 51: 23.000 113 1
2018-05-04 16: 51: 33.000 113 2
2018-05-07 15: 42: 13.000 114 1
2018-05-07 15: 42: 35.000 114 2
2018-05-07 15: 42: 54.000 114 1
2018-05-07 15: 43: 11.000 114 2
2018-05-07 15: 43: 35.000 114 1
2018-05-07 15: 43: 51.000 114 2

В основном, я хочу, чтобы он удалял все объекты, когда есть несколько объектов, следующих друг за другом, где существует SubAddr, я хочу, чтобы он только захватил первый. SubAddr всегда равен 1 или 2. Subaddr - действие, инициируемое пользователем.

Я не хочу делать это в SQL, потому что я хочу выполнять и другие задачи в том же массиве.

Каждая строка данных помещается в объект, и этот объект добавляется в массив. Я хочу, чтобы это отфильтровать эти данные в Python3

РЕДАКТИРОВАТЬ: мой объект выглядит так

class Events:
def __init__(self, id, EventTime, Address, SubAddr, UserId):
    self.id = id
    self.EventTime = EventTime
    self.Address = Address
    self.SubAddr = SubAddr
    self.UserId = UserId

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Попробуйте это

    inp_db_lst = ['2018-05-04 16:47:56.000 113 1','2018-05-04 16:48:45.000 113 2','2018-05-04 16:49:17.000 113 1','2018-05-04 16:49:27.000 113 2','2018-05-04 16:49:48.000 113 1','2018-05-04 16:49:57.000 113 2','2018-05-04 16:50:15.000 113 1','2018-05-04 16:51:01.000 113 2','2018-05-04 16:51:23.000 113 1','2018-05-04 16:51:33.000 113 2','2018-05-07 15:42:13.000 114 1','2018-05-07 15:42:16.000 114 1','2018-05-07 15:42:26.000 114 1','2018-05-07 15:42:35.000 114 2','2018-05-07 15:42:43.000 114 2','2018-05-07 15:42:54.000 114 1','2018-05-07 15:43:02.000 114 1','2018-05-07 15:43:11.000 114 2','2018-05-07 15:43:20.000 114 2','2018-05-07 15:43:35.000 114 1','2018-05-07 15:43:42.000 114 1','2018-05-07 15:43:51.000 114 2','2018-05-07 15:43:58.000 114 2']
    new_res_lst = []
    temp = ''
    for val_str in inp_db_lst:
        if val_str.split()[-1] != temp:
            new_res_lst.append(val_str)
        temp = val_str.split()[-1]
    print new_res_lst

    Result:['2018-05-04 16:47:56.000 113 1', '2018-05-04 16:48:45.000 113 2', '2018-05-04 16:49:17.000 113 1', '2018-05-04 16:49:27.000 113 2', '2018-05-04 16:49:48.000 113 1', '2018-05-04 16:49:57.000 113 2', '2018-05-04 16:50:15.000 113 1', '2018-05-04 16:51:01.000 113 2', '2018-05-04 16:51:23.000 113 1', '2018-05-04 16:51:33.000 113 2', '2018-05-07 15:42:13.000 114 1', '2018-05-07 15:42:35.000 114 2', '2018-05-07 15:42:54.000 114 1', '2018-05-07 15:43:11.000 114 2', '2018-05-07 15:43:35.000 114 1', '2018-05-07 15:43:51.000 114 2']
0 голосов
/ 07 ноября 2018

Вот мое решение:

In [1]: string = '''2018-05-04 16:47:56.000 113 1
   ...: 2018-05-04 16:48:45.000 113 2
   ...: 2018-05-04 16:49:17.000 113 1
   ...: 2018-05-04 16:49:27.000 113 2
   ...: 2018-05-04 16:49:48.000 113 1
   ...: 2018-05-04 16:49:57.000 113 2
   ...: 2018-05-04 16:50:15.000 113 1
   ...: 2018-05-04 16:51:01.000 113 2
   ...: 2018-05-04 16:51:23.000 113 1
   ...: 2018-05-04 16:51:33.000 113 2
   ...: 2018-05-07 15:42:13.000 114 1
   ...: 2018-05-07 15:42:16.000 114 1
   ...: 2018-05-07 15:42:26.000 114 1
   ...: 2018-05-07 15:42:35.000 114 2
   ...: 2018-05-07 15:42:43.000 114 2
   ...: 2018-05-07 15:42:54.000 114 1
   ...: 2018-05-07 15:43:02.000 114 1
   ...: 2018-05-07 15:43:11.000 114 2
   ...: 2018-05-07 15:43:20.000 114 2
   ...: 2018-05-07 15:43:35.000 114 1
   ...: 2018-05-07 15:43:42.000 114 1
   ...: 2018-05-07 15:43:51.000 114 2
   ...: 2018-05-07 15:43:58.000 114 2'''

In [2]: data = string.splitlines()

In [3]: data
Out[3]: 
['2018-05-04 16:47:56.000 113 1',
 '2018-05-04 16:48:45.000 113 2',
 '2018-05-04 16:49:17.000 113 1',
 '2018-05-04 16:49:27.000 113 2',
 '2018-05-04 16:49:48.000 113 1',
 '2018-05-04 16:49:57.000 113 2',
 '2018-05-04 16:50:15.000 113 1',
 '2018-05-04 16:51:01.000 113 2',
 '2018-05-04 16:51:23.000 113 1',
 '2018-05-04 16:51:33.000 113 2',
 '2018-05-07 15:42:13.000 114 1',
 '2018-05-07 15:42:16.000 114 1',
 '2018-05-07 15:42:26.000 114 1',
 '2018-05-07 15:42:35.000 114 2',
 '2018-05-07 15:42:43.000 114 2',
 '2018-05-07 15:42:54.000 114 1',
 '2018-05-07 15:43:02.000 114 1',
 '2018-05-07 15:43:11.000 114 2',
 '2018-05-07 15:43:20.000 114 2',
 '2018-05-07 15:43:35.000 114 1',
 '2018-05-07 15:43:42.000 114 1',
 '2018-05-07 15:43:51.000 114 2',
 '2018-05-07 15:43:58.000 114 2']

In [11]: datas = list(map(lambda s: s.rsplit(' ', 2), data))

In [12]: datas
Out[12]: 
[['2018-05-04 16:47:56.000', '113', '1'],
 ['2018-05-04 16:48:45.000', '113', '2'],
 ['2018-05-04 16:49:17.000', '113', '1'],
 ['2018-05-04 16:49:27.000', '113', '2'],
 ['2018-05-04 16:49:48.000', '113', '1'],
 ['2018-05-04 16:49:57.000', '113', '2'],
 ['2018-05-04 16:50:15.000', '113', '1'],
 ['2018-05-04 16:51:01.000', '113', '2'],
 ['2018-05-04 16:51:23.000', '113', '1'],
 ['2018-05-04 16:51:33.000', '113', '2'],
 ['2018-05-07 15:42:13.000', '114', '1'],
 ['2018-05-07 15:42:16.000', '114', '1'],
 ['2018-05-07 15:42:26.000', '114', '1'],
 ['2018-05-07 15:42:35.000', '114', '2'],
 ['2018-05-07 15:42:43.000', '114', '2'],
 ['2018-05-07 15:42:54.000', '114', '1'],
 ['2018-05-07 15:43:02.000', '114', '1'],
 ['2018-05-07 15:43:11.000', '114', '2'],
 ['2018-05-07 15:43:20.000', '114', '2'],
 ['2018-05-07 15:43:35.000', '114', '1'],
 ['2018-05-07 15:43:42.000', '114', '1'],
 ['2018-05-07 15:43:51.000', '114', '2'],
 ['2018-05-07 15:43:58.000', '114', '2']]


In [20]: l = [datas[0]]

In [21]: prev = datas[0][2]

In [22]: for i, j, k in datas[1:]:
    ...:     if prev == k:
    ...:         continue
    ...:     l.append([i, j, k])
    ...:     prev = k
    ...:     

In [23]: l
Out[23]: 
[['2018-05-04 16:47:56.000', '113', '1'],
 ['2018-05-04 16:48:45.000', '113', '2'],
 ['2018-05-04 16:49:17.000', '113', '1'],
 ['2018-05-04 16:49:27.000', '113', '2'],
 ['2018-05-04 16:49:48.000', '113', '1'],
 ['2018-05-04 16:49:57.000', '113', '2'],
 ['2018-05-04 16:50:15.000', '113', '1'],
 ['2018-05-04 16:51:01.000', '113', '2'],
 ['2018-05-04 16:51:23.000', '113', '1'],
 ['2018-05-04 16:51:33.000', '113', '2'],
 ['2018-05-07 15:42:13.000', '114', '1'],
 ['2018-05-07 15:42:35.000', '114', '2'],
 ['2018-05-07 15:42:54.000', '114', '1'],
 ['2018-05-07 15:43:11.000', '114', '2'],
 ['2018-05-07 15:43:35.000', '114', '1'],
 ['2018-05-07 15:43:51.000', '114', '2']]
...