删除列表前后的元素

Removing elements before and after a list

我从一个看起来像这样的列表开始:

['package1:', 'package2:', 'package1,', 'package2', '|', 'package4', 'package3:', 'package2', '|', 'package1,', 'package3']

由于我正在使用依赖项并且 | 表示 or,当我找到一个时,我会创建一个子列表以便稍后处理它。

现在输出如下所示:

['package1:', 'package2:', 'package1,', 'package2', ['package2', 'package4'], 'package4', 'package3:', 'package2', ['package2', 'package1,'], 'package1,', 'package3']

但它应该是这样的:

['package1:', 'package2:', 'package1,', ['package2', 'package4'], 'package3:', ['package2', 'package1,'], 'package3']

关键是我的代码发现|已经晚了,因为之前的元素已经添加了,也不要跳到下一个元素,因为是一个循环(基本上是之前的元素在 | 之后)。

我的代码是这样的:

for element in range(len(raw_text)):
temp_list=[]
flag = False

if raw_text[element] == '|':
    temp_list.append(raw_text[element-1]), temp_list.append(raw_text[element+1])
    flag = True
if raw_text[element].endswith('') and raw_text[element] != '|':
    text.append(raw_text[element])
if flag == True:
    text.append(temp_list)

您可以使用 del 这样的东西 del text[3] 从列表中删除一个项目。因此,在您的 if flag == True: 中,只需添加 del text[-1] 之类的内容即可删除最后添加的元素,然后追加您的新列表,然后跳过或不添加下一个项目。

另一种选择是更改

if flag == True:
    text.append(temp_list)

if flag == True:
    text[-1] = temp_list

然后跳过列表中的下一个元素。

是这样的吗?

text = []
i = 0
while True:
    if i > len(raw_text)-2:
        # No more possible |'s, so wrap things up
        text.append( raw_text[-1] )
        break
    if raw_text[i+1] == '|':
        # Add the items around the |; move past the group
        text.append( [raw_text[i], raw_text[i+2]] )
        i += 3
    else:
        # Add the current element & move on
        text.append( raw_text[i] )
        i += 1