используйте itertools.groupby
для группировки последовательных элементов по средней части:
inputArray=["slide_0000_00.jpg",
"slide_0000_01.jpg",
"slide_0000_02.jpg",
"slide_0001_01.jpg",
"slide_0001_02.jpg",
"slide_0002_01.jpg"]
import itertools
result = [list(g) for _,g in itertools.groupby(inputArray,key = lambda x:x.split("_")[1])]
, что дает:
>>> result
[['slide_0000_00.jpg', 'slide_0000_01.jpg', 'slide_0000_02.jpg'],
['slide_0001_01.jpg', 'slide_0001_02.jpg'],
['slide_0002_01.jpg']]
обратите внимание, что если группы не следуйте, группировка не будет работать (если вы сначала не отсортируете список, здесь будет работать простая сортировка, но сложность не удовлетворительная). Классическая альтернатива c в этом случае заключается в использовании collections.defaultdict(list)
:
import collections
d = collections.defaultdict(list)
for x in inputArray:
d[x.split("_")[1]].append(x)
result = list(d.values())
результат идентичен (порядок может варьироваться, в зависимости от версии python и если словари сохраняют порядок. Вы можете ожидайте, что свойство от версии 3.5)