У меня есть длинный список, подобный приведенному ниже, который я отсортировал на основе (element [0], element [3], element [2]) соответственно. Под элементом я подразумеваю цифры между подчеркиванием.
list3=['20180406_145813_4_1.jpg',
'20180406_145813_5_1.jpg',
'20180406_145813_6_1.jpg',
'20180406_175827_10_12.jpg',
'20180406_175827_11_12.jpg',
'20180409_190651_7_2.jpg',
'20180409_190651_8_2.jpg',
...]
Теперь я хочу разделить список на основе элемента [3]. Мой желаемый результат:
[['20180406_145813_4_1.jpg',
'20180406_145813_5_1.jpg',
'20180406_145813_6_1.jpg'],
['20180406_175827_10_12.jpg',
'20180406_175827_11_12.jpg'],
['20180409_190651_7_2.jpg',
'20180409_190651_8_2.jpg'],
...]
У меня есть этот код, который печатает каждое имя в виде списка. Я не знаю, как группировать по element3 в этом коде:
for imagename in list3:
element3 = imagename.split("_")[3]
for j,m in groupby(list3):
print(list(m))
Вы можете использовать itertools.groupby следующим образом:
from itertools import groupby
list3 = ['20180406_145813_4_1.jpg',
'20180406_145813_5_1.jpg',
'20180406_145813_6_1.jpg',
'20180406_175827_10_12.jpg',
'20180406_175827_11_12.jpg',
'20180409_190651_7_2.jpg',
'20180409_190651_8_2.jpg']
result = [list(group) for _, group in groupby(list3, key=lambda x: x.split('_')[3])]
print(result)
Выход
[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], ['20180406_175827_10_12.jpg', '20180406_175827_11_12.jpg'], ['20180409_190651_7_2.jpg', '20180409_190651_8_2.jpg']]
Приведенное выше понимание списка эквивалентно следующему циклу for
:
result = []
for _, group in groupby(list3, key=lambda x: x.split('_')[3]):
result.append(list(group))
Попробуйте это (не импортируя ничего):
list3=['20180406_145813_4_1.jpg',
'20180406_145813_5_1.jpg',
'20180406_145813_6_1.jpg',
'20180406_175827_10_12.jpg',
'20180406_175827_11_12.jpg',
'20180409_190651_7_2.jpg',
'20180409_190651_8_2.jpg',
...]
res = []
for first, second, third in zip(*[iter(list3)]*3):
res.append([first, second, third])
Просто добавьте список first, seconds, third
в список res
print(res)
[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'],
['20180406_175827_10_12.jpg', ...]]