Объекты массива фильтров Python
Я вытащил следующие данные из базы данных
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 ответа
Вот мое решение:
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']]
Попробуй это
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']