У меня есть вложенный список со следующей структурой:
mylist = [['A', 'Car', '15'], ['A', 'Car', '15'], ['A', 'Plane', '16'], ['A', 'Bike', '20'], ['A', 'Car', '16'], ['A', 'Boat', '16']]
Он очень длинный, около 10 миллионов элементов. И таких списков у меня много. Я хочу сделать следующее:
Если третьи элементы (номера строк) каждого последовательного элемента из mylist
являются дубликатами, удалите элементы, содержащие этот дубликат.
Например:
['A', 'Car', '15']
и ['A', 'Car', '15']
- это последовательные элементы из mylist
, и оба они содержат '15'
, поэтому они являются последовательными дубликатами, и один должен быть удален.
Аналогично, ['A', 'Car', '16']
и ['A', 'Boat', '16']
являются последовательными, и оба содержат '16'
, поэтому один должен быть удален.
Итак, я бы получил следующее:
newlist = [['A', 'Car', '15'], ['A', 'Plane', '16'], ['A', 'Bike', '20'], ['A', 'Car', '16']]
Первоначально я написал следующее:
for ele in mylist:
eleindex = mylist.index(ele)
previousele = mylist[eleindex-1]
if float(ele[2]) != float(previousele[2]):
newlist.append(ele)
К сожалению, для таких длинных списков написанного мной кода потребовалось слишком много времени. Итак, я начал искать в Интернете и узнал, что библиотека itertools
(с использованием groupby
) полезна и очень быстро при выполнении подобных действий. Затем я нашел несколько примеров, которые я попытался эмулировать, однако они были в основном для простых списков, а не для чего-то более сложного, как моя ситуация. Поработав, я не смог понять, как использовать его для своих вложенных списков.
Итак, кто-нибудь знает, как это сделать очень быстро? Кроме того, если у вас есть решение, которое будет быстрее, чем itertools
, это даже лучше!