在列表中的两个元素之间连接列表元素

join list elements between two elements in a list

我有一个列表,我有两个列表元素 start:end:。在这两者之间有未定义数量的元素,我想加入 start 元素。 此外,end: 可以有不同的名称,但它始终以 end: 开头。这是我的清单

sth_list = ['name: michael', 'age:56', 'start:','','something','is','happening','end:', 'anything could be here:', 'some other things:', 'more things:'] 

我想要这个

 ['name: michael', 'age:56', 'start: something is happening', 'end:', 'anything could be here:', 'some other things:', 'more things:']

到目前为止我所拥有的就是这个。但它只给了我开始和结束之间的连接元素,但我想要上面的完整列表。

 ''.join([element for n, element in enumerate(sth_list) if ((n>sth_list.index("start:")) & (n<sth_list.index([e for e in sth_list if e.startswith('end')][0])))])

您可以使用经典循环:

import re

out = []
flag = False
for item in sth_list:
    if item.startswith('end:'):
        flag = False
    if flag:
        if item:
            out[-1] += ' '+item
    else:
        out.append(item)
    if item == 'start:':
        flag = True

输出:

['name: michael',
 'age:56',
 'start: something is happening',
 'end:',
 'anything could be here:',
 'some other things:',
 'more things:']

获取start:end:的索引。然后你可以加入它们并使用切片赋值来用结果替换列表的那部分。

start = sth_list.index('start:')
end = min(i for i, s in enumerate(sth_list) if s.startswith('end:'))
sth_list[start:end] = [' '.join(sth_list[start:end])]

请注意,这仅在列表中只有一对 start:/end: 时有效。