Python list comprehension从列表中删除元素和下一个元素

Ada*_*amR 1 python regex coding-style list-comprehension

我想使用列表推导来从字符列表中删除所有出现的'\ x08'(退格字符)我还想在'\ x08'之前删除字符.

我最终得到了一个递归函数调用,但是有一个可读/pythonic单线程会很好.

示例输入:

['a', 't', '+', 'B', 'A', 'D', '\x08', '\x08', '\x08','c', 'o', 'p', 's', '=', '?']
Run Code Online (Sandbox Code Playgroud)

期望的输出:

['a', 't', '+', 'c', 'o', 'p', 's', '=', '?']
Run Code Online (Sandbox Code Playgroud)

万一人们希望看到我当前的解决方案.

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)
Run Code Online (Sandbox Code Playgroud)

jua*_*aga 7

这是一个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', '=', '?']
>>>
Run Code Online (Sandbox Code Playgroud)

它是可读的,显式的,并利用了Python list的性能特征.Pythonic并不是"one-liner"的同义词,事实上,通常单线解决方案与Pythonic相反.