リスト内包表記を使用して、文字のリストから "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)
回答:
回答№1の場合は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", "=", "?"]
>>>
読みやすく、明示的で、Pythonのパフォーマンス特性を利用しています。 list
s。 Pythonicは "one-liner"と同義ではありません。実際、多くの場合、one-linerソリューションはPythonicの反対です。