Skip to main content
 首页 » 编程设计

Python 列表理解从列表中删除元素和下一个元素

2025年05月04日13jiqing9006

我想使用列表理解从字符列表中删除所有出现的“\x08”(退格字符)我还想删除“\x08”之前的字符。

我以递归函数调用结束,但如果有一个可读/pythonic one liner 就好了。

示例输入:

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

请您参考如下方法:

这是一个 Pythonic 解决方案:

>>> 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 的性能特征。 Pythonic 不是“单行”的同义词,事实上,单行解决方案往往与 Pythonic 相反。