私はリストを持っています:list = [1,2,3]
。そして、それを括弧付きの文字列に変換したいと思いますstring = (1,2,3)
。
現在、文字列置換を使用していますstring = str(list).replace('[','(').replace(']',')')
。しかし、正規表現を使用するより良い方法があると思います。しかし、私はそれをどのように行うのか分かりません。どうもありがとう
実際にリストがある場合は、次のようにします。
>>> s = [1,2,3]
>>> str(tuple(s))
'(1, 2, 3)'
代わりに使用することもできますstring.maketrans
-シーケンスよりも高速に実行str.replace
され、より多くの単一文字の置換に合わせて拡張できると思います。
>>> import string
>>> table = string.maketrans('[]','()')
>>> s = "[1, 2, 3, 4]"
>>> s.translate(table)
'(1, 2, 3, 4)'
これを使用して、オプションの2番目の引数をstr.translate
:に渡すことにより、元の文字列から文字を削除することもできます。
>>> s = str(['1','2'])
>>> s
"['1', '2']"
>>> s.translate(table,"'")
'(1, 2)'
python3.xでは、文字列モジュールがなくなり、組み込み をmaketrans
介してアクセスできるようになります。str
table = str.maketrans('[]','()')
str([1,2,3]).replace('[','(').replace(']',')')
あなたのためにうまくいくはずです。私の知る限り、それは前方および後方互換性があります。
再利用性に関しては、複数の異なるタイプの文字列に対して次の関数を使用して、文字列の開始と終了を変更できます。
def change(str_obj,start,end):
if isinstance(str_obj,str) and isinstance(start,str) and isinstance(end,str):
pass
else:
raise Exception("Error, expecting a 'str' objects, got %s." % ",".join(str(type(x)) for x in [str_obj,start,end]))
if len(str_obj)>=2:
temp=list(str_obj)
temp[0]=start
temp[len(str_obj)-1]=end
return "".join(temp)
else:
raise Exception("Error, string size must be greater than or equal to 2. Got a length of: %s" % len(str_obj))
あなたに必要なのは:
"(" + strng.strip('[]') + ")"
単一要素リストと複数要素リストの両方で機能します。
>>> lst = [1,2,3]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1, 2, 3)'
>>> lst = [1]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1)'
これを試して:
'({0})'.format(', '.join(str(x) for x in list))
ちなみに、list
組み込み関数と衝突するため、独自の変数に名前を付けることはお勧めできません。またstring
、同じ名前のモジュールと競合する可能性があります。
本当に正規表現を使用したい場合は、これでうまくいくと思います。しかし、他の投稿されたソリューションは、おそらくより効率的で使いやすいものです。
import re
string = str(list)
re.sub(r"[\[]", "(", string)
re.sub(r"[\]]", ")", string)
@mgilsonこのようなものですか?
def replace_stuff(string):
string_list = list(string)
pattern = re.compile(r"[\[\]]")
result = re.match(pattern, string)
for i in range(len(result.groups())):
bracket = result.group(i)
index = bracket.start()
print(index)
if bracket == "[":
string_list[index] = "("
else:
string_list[index] = ")"
return str(string_list)
何らかの理由で、正規表現が一致を見つける必要がある場合でも、 len(result.groups()) は常に 0 です。これがより速いかどうかをテストできませんでしたが、動作させることができなかったため、テストできませんでした。私は今ベッドに行かなければならないので、誰かがこれを修正できるなら先に進んでください.