2015-05-26 62 views
0

從我看起來像這樣的列表中開始:刪除元素之前和列表之後

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

回答

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 
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 

,然後跳到列表中的下一個元素。

相關問題