簡體   English   中英

Python列表理解從列表中刪除元素和下一個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM