6

我有一个清单:list = [1,2,3]。我想将其转换为带括号的字符串:string = (1,2,3)

目前我正在使用字符串替换string = str(list).replace('[','(').replace(']',')')。但我认为使用 regex.sub 有更好的方法。但我不知道该怎么做。非常感谢

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)'

您甚至可以通过将可选的第二个参数传递给以下方法来使用它从原始字符串中删除字符str.translate

>>> s = str(['1','2'])
>>> s
"['1', '2']"
>>> s.translate(table,"'")
'(1, 2)'

maketrans在 python3.x 中,字符串模块消失了,您可以通过str内置 函数访问:

table = str.maketrans('[]','()')
于 2013-02-19T03:01:15.330 回答
3

正如所有答案所证明的那样,有十亿种方法可以做到这一点。这是另一个:

my_list = [1,2,3]
my_str = "(%s)" % str(my_list).strip('[]')

或使其可回收:

list_in_parens = lambda l: "(%s)" % str(l).strip('[]')
my_str = list_in_parens(my_list)
于 2017-03-30T17:15:00.540 回答
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 回答