删除列表前后的元素

时间:2015-05-26 16:30:50

标签: list python-3.x dependencies

我从一个如下所示的列表开始:

['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)

2 个答案:

答案 0 :(得分:1)

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

另一种选择是改变

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

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

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

答案 1 :(得分:1)

这样的东西?

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