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-01 21:07:27 浏览: 99
Python实现合并两个列表的方法分析
可以按照以下步骤来实现:
1. 定义一个新的空列表b,一个新的空列表c,以及两个变量start和end,初始值为-1。
2. 遍历列表a中的每一个元素,判断是否以B开头,如果是,则将该元素加入新的列表b中,并将start设置为该元素在原列表a中的索引。
3. 如果当前元素不是以B开头,且start不等于-1,则将该元素加入新的列表b中,并将end设置为该元素在原列表a中的索引。
4. 如果当前元素以I开头,则将该元素加入新的列表b中。
5. 如果当前元素以O开头,则判断end是否等于-1,如果不等于,则将end加1并将该索引加入新的列表c中,同时将start和end重置为-1。
6. 最后返回列表b和列表c。
以下是实现的代码:
```python
def merge_strings(a):
b = []
c = []
start = -1
end = -1
for i, s in enumerate(a):
if s.startswith('B'):
if start != -1:
end = i - 1
if a[end+1].startswith('B') or a[end+1].startswith('O'):
b.append(''.join(a[start:end+1]))
c.extend(range(start, end+1))
start = i
end = -1
else:
start = i
elif start != -1:
b.append(s)
if s.startswith('I'):
continue
elif s.startswith('O'):
end += 1
c.extend(range(start, end))
start = -1
end = -1
if start != -1:
b.append(''.join(a[start:]))
c.extend(range(start, len(a)))
return b, c
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)
print(c)
```
输出结果为:
```
['B-ORGI-ORGI-ORG', 'B-TITLEI-TITLE', 'B-ORG']
[0, 1, 2, 4, 5, 8]
```
阅读全文