2017-07-24 94 views
1

刪除元素和下一個元素我想用列表解析刪除所有來自字符的列表中出現「\ X08」(退格鍵)的冰我也想之前的「\刪除字符X08' 。Python列表理解從列表

我結束了一個遞歸函數調用,但它會很好有一個可讀/pythonic一個班輪。

例輸入:

['a', 't', '+', 'B', 'A', 'D', '\x08', '\x08', '\x08','c', 'o', 'p', 's', '=', '?'] 

所需的輸出:

['a', 't', '+', 'c', 'o', 'p', 's', '=', '?'] 

如果人們希望看到我目前的解決方案了。

def line_parser(self,line): 
    if '\x08' in line: 
     del line[line.index('\x08') -1] 
     del line[line.index('\x08')] 
     self.line_parser(line) 
    else: 
     self.something_else(line) 
+0

應該是什麼您的示例列表的輸出? – user3885927

+0

編輯爲清楚起見 – AdamR

+1

有一個解決方案[這裏](https://stackoverflow.com/questions/34362966/python-how-to-apply-backspaces-to-a-string)。您需要首先「加入」列表 – vaultah

回答

7

這裏是一個Python化的解決方案:

>>> data = ['a', 't', '+', 'B', 'A', 'D', '\x08', '\x08', '\x08','c', 'o', 'p', 's', '=', '?'] 
>>> newdata = [] 
>>> for c in data: 
...  if c == '\x08' and newdata: 
...   newdata.pop() 
...  else: 
...   newdata.append(c) 
... 
'D' 
'A' 
'B' 
>>> newdata 
['a', 't', '+', 'c', 'o', 'p', 's', '=', '?'] 
>>> 

這是可讀的,明確的,並採取Python的list S的性能優勢。 Pythonic不是「單線」的代名詞,事實上,單線解決方案通常與Pythonic相反。