Объединить строки в цикле
Есть такие вот входные данные
arr = ['(e)','','апрапрапв','','(f)',' ','текст7',' ','(g)',' ','текст3;',' ','(h)',' ','текст','еще текст','','(i)', '(u)']
Как можно привести их в такой вид
arr = ['(e) апрапрапв',' ','(f) текст7',' ','(g) текст3;','','(h) текст еще текст',' ','(i)','(u)']
Ответы (3 шт):
Автор решения: Альберт Чехович
→ Ссылка
Может так:
arr = ['(e)',' ','апрапрапв',' ','(f)',' ','текст7',' ','(g)',' ','текст3;',' ','(h)',' ','текст','еще текст','','(i)', '(u)']
print('Было',arr)
i=0
while i < len(arr)-1:
if "(" in arr[i]:
while not "(" in arr[i+1] and not "(" in arr[i+2] and i<len(arr)-2:
arr[i]+=arr[i+1]
del arr[i+1]
i+=1
print('Стало',arr)
И хотелось бы уточнить - там пробелы или пустые строки в списке? и какой все таки принцип соединений?
Автор решения: vadim vaduxa
→ Ссылка
ну как я понял задачу, и если не думать как сделать "красиво" а решать прямо в лоб
res, _q0, _q1 = [], [], []
for a in arr:
if a.lstrip():
if _q1 and a.startswith('(') and a.endswith(')'):
_q0.append(_q1)
_q1 = []
_q1.append(a)
if _q1:
_q0.append(_q1)
for q in _q0:
res.append(' '.join(q))
if len(q) != 1:
res.append(' ')
if res[-1] == ' ':
del res[-1]
print(res)
Автор решения: CrazyElf
→ Ссылка
По приколу вот в одну строку, но последний пробел между пунктами мне уже лениво убирать:
arr = ['(e)','','апрапрапв','','(f)',' ','текст7',' ','(g)',' ','текст3;',' ','(h)',' ','текст','еще текст','','(i)', '(u)']
res = sum([['('+x.strip(), ' '] for x in ' '.join(filter(len, filter(str.strip, arr))).split('(') if len(x)],[])[:-1]
print(res)
Вывод:
['(e) апрапрапв', ' ', '(f) текст7', ' ', '(g) текст3;', ' ', '(h) текст еще текст', ' ', '(i)', ' ', '(u)']