Как построить цикл при множественном переборе элементов?
Приветствую
Задача
На основе первого слова нужно перестроить предложение таким образом, чтобы первая буква каждого следующего слова совпадала с предыдущей буквой предыдущего слова, а все остальные слова, которые не подходят под это правило должны идти за отсортированным по заданному выше алгоритму.
Дана строка: a = 'pol xxx nog yyy len'
Имея в качестве первого слова pol, предложение по идее должно превратиться в: 'pol len nog xxx yyy'.
До конца не могу понять как это реализовать. Первые этапы вроде понятны:
1. преобразуем строку в список
2. запускаем цикл for ... in с поиском совпадений по условиям
3. найденные совпадения добавляем в новую строку
Вот в этом месте начинаются сложности. Ну прошлись мы циклом по списку, ну добавили подходящие по условию элементы в строку, но при одном проходе цикла строка принимает незаконченный вид: 'pol len'.
4. Можно удалить найденные совпадения из списка и добавить их к новой строке, тогда строка примет следующий вид: 'pol len xxx nog yyy'. Но последовательность слов в этой сроке не является логически завершенной, строка должна иметь такой вид: 'pol len nog xxx yyy'.
5. Чтобы строка приобрела законченный вид в данном примере, можно добавить второй цикл или применить цикл со счетчиком типа while и задать счетчику какое-то значение.
На этом этапе тоже сложности с пониманием. Если предложение заранее не известно, то нельзя же задать количество итераций на глаз. Можно установить количество итераций равное количеству элементов списка, но подозреваю, что это неразумно и при большом количестве предложений весь процесс может затянуться.
Поведайте правильный или правильные пути решения этой задачи.
a = 'len asd sas nas sda orr' # исходная строка
x = a.split(' ') # формируем из нее массив
r.append(x[0]) # берем первый элемент с которого начнем
del x[0] # удаляем чтобы не мешал
while (len(x) > 0): # пока исходный массив не пустой
z = False # проверка на то, что слово начинается с последней буквы предыдущего слова
for i in x:
if (i[0] == r[-1][-1]): # если начинается, то добавляем в массив
r.append(i)
del x[x.index(i)]
z = True
break
if (not z): # если слово не найдено, то дописываем оставшиеся
r.extend(x)
x = []
r
>>> ['len', 'nas', 'sas', 'sda', 'asd', 'orr']