Я работаю с python, и у меня есть следующий список:
mylist = ['Module(stmt* body, type_ignore *type_ignores)', '| Interactive(stmt* body)', 'FunctionDef(identifier name, arguments args,','stmt* body, expr* decorator_list, expr? returns,','string? type_comment)']
Я хочу объединить один элемент списка с предыдущим, если второй элемент не заканчивается )
и предыдущий элемент не начинается с |
, тогда удалите второй элемент. Например, mylist
следует преобразовать как:
mylist = ['Module(stmt* body, type_ignore *type_ignores)', '| Interactive(stmt* body)', 'FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)']
Я написал следующий рекурсивный код:
def test(line1, line2):
if line1[-1] != ')' and line2[0] != '|':
return True, line1 + line2
else:
return False, line1
def concat_rule(lines):
for index in range(len(lines)):
if index + 1 >= len(lines):
return lines
value = test(lines[index], lines[index + 1])
if value[0]:
lines[index] = value[1]
del lines[index + 1]
break
if value[0]:
return concat_rule(lines)
Он работает, но мне интересно, существует ли простейшее решение с всеобъемлющим список.