在python中使用元组和列表格式化字符串

时间:2017-07-07 04:53:26

标签: python python-3.x formatting

在Python3.4中我有一个元组

t = ('A', 'B', 'C')

和一个清单

l = ['P', 'Q', 'R']

我需要将元组转换为格式为"(#A;#B;#C)"的字符串,并将列表转换为格式为"(@P; @Q; @R)"的字符串。显而易见的方法是使用for循环和字符串操作遍历。

有没有办法在不运行循环的情况下执行此操作?

谢谢!

5 个答案:

答案 0 :(得分:6)

如果你真的坚持你的格式而没有for循环,那么可能会尝试以下内容:

l_result = '(@' + '; @'.join(l) + ')'
t_result = '(#' + ';#'.join(t) + ')'

答案 1 :(得分:2)

为什么不使用循环?这可以通过理解非常简单地完成:

>>> t = ('A', 'B', 'C')
>>> '({})'.format(';'.join('#{}'.format(s) for s in t))
'(#A;#B;#C)'
>>> 
>>> l = ['P', 'Q', 'R']
>>> '({})'.format('; '.join('@{}'.format(s) for s in l))
'(@P; @Q; @R)'
>>> 

答案 2 :(得分:0)

如果不使用循环就是这种情况,另一种方法可以是将它们转换为字符串并使用string的replace方法,如下所示

str(t).replace("', '", ";#").replace("('", "(#").replace("')", ")")


str(l).replace("', '", '; @').replace("['", "(@").replace("']", ")")

如果只有三个元素,您也可以单独替换它们。

答案 3 :(得分:0)

没有明确的循环,甚至不是列表理解:

>>> t = ('A', 'B', 'C')
>>> l = ['P', 'Q', 'R']
>>> '(' + (len(t) * '#%s;')[:-1] % t + ')'
'(#A;#B;#C)'
>>> '(' + (len(l) * '@%s; ')[:-2] % tuple(l) + ')'
'(@P; @Q; @R)'

答案 4 :(得分:-1)

我不知道为什么你不想使用for循环,但你可以使用列表理解来做,你会使用for循环,但是更漂亮

l = ['P', 'Q', 'R']

new = '('+'; '.join(['@'+i for i in l])+')'

print(new)
(@P; @Q; @R)

你可以为元组做同样的事情。