[英]Python list comprehension remove element and next element from list
我想使用列表推導從字符列表中刪除所有出現的“ \\ x08”(退格字符),我也想刪除“ \\ x08”之前的字符。
我最終得到了一個遞歸函數調用,但是擁有一個可讀的 / 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)
這是一個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相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.