'12233322155552'のような文字列では、重複を削除することで '1235'を得ることができます。しかし、私が保持したいのは、1232152で、連続した複製を削除するだけです。Python - 文字列内で連続する場合にのみ重複を削除する方法は?
ありがとうございます。
'12233322155552'のような文字列では、重複を削除することで '1235'を得ることができます。しかし、私が保持したいのは、1232152で、連続した複製を削除するだけです。Python - 文字列内で連続する場合にのみ重複を削除する方法は?
ありがとうございます。
質問のMicrosoft/Amazonの面接のタイプ: これは擬似コードであり、実際のコードは練習問題として残されています。よりハイレベルとして
for each char in the string do:
if the current char is equal to the next char:
delete next char
else
continue
return string
は、(ない実際に実装)してみてください:
for s in string:
if s == s+1: ## check until the end of the string
delete s+1
ヒント:itertoolsモジュールは、超便利です。特に、一つの機能は、itertools.groupbyは、ここでは本当に便利になるかもしれません:
をitertools.groupby(反復可能[キー])
のiterableからの連続したキーとグループを返すイテレータを作成します。キーは、各 要素のキー値を計算する関数です。指定されていない場合、またはNoneの場合、keyはデフォルトでID というIDになり、要素は変更されません。一般に、反復可能な は、同じキー機能で既にソートされている必要があります。
文字列が反復可能であるため、だから、何を行う可能性はある:GROUPBYため
use groupby to collect neighbouring elements
extract the keys from the iterator returned by groupby
join the keys together
すべて1つのきれいなラインで行うことができます
..
+1。カフオフ、のようなもの:Pythonの2.7.2での私のために
from itertools import groupby
def remove_dupes(arg):
# create generator of distinct characters, ignore grouper objects
unique = (i[0] for i in groupby(arg))
return ''.join(unique)
クックス
まず第一に、あなたは、この場合(「Pythonの不変の文字列を」GoogleのPythonで文字列から何かを削除することはできません。明確ではない)。
M最初のアプローチは、次のようになります。
foo = '12233322155552'
bar = ''
for chr in foo:
if bar == '' or chr != bar[len(bar)-1]:
bar += chr
や、itertoolsを使用して、上からヒント:
''.join([ k[0] for k in groupby(a) ])
t = '12233322155552'
for i in t:
dup = i+i
t = re.sub(dup, i, t)
あなたは1232152
import re
answer = re.sub(r'(\d)\1+', r'\1', '12233322155552')
number = '12233322155552'
temp_list = []
for item in number:
if len(temp_list) == 0:
temp_list.append(item)
elif len(temp_list) > 0:
if temp_list[-1] != item:
temp_list.append(item)
print(''.join(temp_list))
として最終的な出力を得ることができます
あなたはitertools
を使用することができ、ここで(Pythonはすでに擬似コードにかなりくそ近いですが)正確なコードを与えないで1つのライナー
>>> s = '12233322155552'
>>> ''.join(i for i, _ in itertools.groupby(s))
'1232152'
良いの呼び出しがあります。 –