6

私はリストを持っています:list = [1,2,3]。そして、それを括弧付きの文字列に変換したいと思いますstring = (1,2,3)

現在、文字列置換を使用していますstring = str(list).replace('[','(').replace(']',')')。しかし、正規表現を使用するより良い方法があると思います。しかし、私はそれをどのように行うのか分かりません。どうもありがとう

4

7 に答える 7

17

実際にリストがある場合は、次のようにします。

>>> s  = [1,2,3]
>>> str(tuple(s))
'(1, 2, 3)'
于 2013-02-19T03:02:29.737 に答える
7

代わりに使用することもできます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('[]','()')
于 2013-02-19T03:01:15.330 に答える
1

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))
于 2013-02-19T03:04:34.693 に答える
1

あなたに必要なのは:

"(" + strng.strip('[]') + ")"

単一要素リストと複数要素リストの両方で機能します。

>>> lst = [1,2,3]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1, 2, 3)'


>>> lst = [1]
>>> strng = str(lst)
>>> "(" + strng.strip('[]') + ")"
'(1)'
于 2019-02-27T23:58:47.600 に答える
0

これを試して:

'({0})'.format(', '.join(str(x) for x in list))

ちなみに、list組み込み関数と衝突するため、独自の変数に名前を付けることはお勧めできません。またstring、同じ名前のモジュールと競合する可能性があります。

于 2013-02-19T03:03:00.657 に答える
0

本当に正規表現を使用したい場合は、これでうまくいくと思います。しかし、他の投稿されたソリューションは、おそらくより効率的で使いやすいものです。

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 です。これがより速いかどうかをテストできませんでしたが、動作させることができなかったため、テストできませんでした。私は今ベッドに行かなければならないので、誰かがこれを修正できるなら先に進んでください.

于 2013-02-19T03:07:09.220 に答える