2017-07-24 96 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相反。