python中的列表,做如下如理:取出部分连续的字符串进行合并,并放入一个新的列表,并返回这几个字符串在原列表中的索引,要求取出的字符串以B开头,结束的那个字符串以I开头,并且结束的字符串的下一个字符串要以B或者O开头,若字符串以B开头,下一个便是以B或者O开头,则只取出B,例如,对于列表a = ['B-ORG', 'I-ORG', 'I-ORG', 'O-TITLE', 'B-TITLE', 'I-TITLE', 'O-TITLE', 'O','B-ORG','O']返回列表b=['B-ORGI-ORGI-ORG','B-TITLEI-TITLE','B-ORG']和列表c=[0,1,2,4,5,8]
时间: 2023-09-04 07:10:55 浏览: 22
以下是实现该功能的代码:
```python
def merge_strings(a):
b = []
c = []
start_index = None
end_index = None
for i, s in enumerate(a):
if s.startswith('B'):
if start_index is not None:
b.append(''.join(a[start_index:end_index]))
c.append(list(range(start_index, end_index)))
start_index = i
end_index = i + 1
elif s.startswith('I'):
end_index = i + 1
elif s.startswith('O'):
if start_index is not None:
b.append(''.join(a[start_index:end_index]))
c.append(list(range(start_index, end_index)))
start_index = None
end_index = None
if start_index is not None:
b.append(''.join(a[start_index:end_index]))
c.append(list(range(start_index, end_index)))
return b, [i for indices in c for i in indices]
```
可以这样使用:
```python
a = ['B-ORG', 'I-ORG', 'I-ORG', 'O-TITLE', 'B-TITLE', 'I-TITLE', 'O-TITLE', 'O','B-ORG','O']
b, c = merge_strings(a)
print(b) # ['B-ORGI-ORGI-ORG', 'B-TITLEI-TITLE', 'B-ORG']
print(c) # [0, 1, 2, 4, 5, 8]
```
阅读全文