在Python3.4中我有一个元组
t = ('A', 'B', 'C')
和一个清单
l = ['P', 'Q', 'R']
我需要将元组转换为格式为"(#A;#B;#C)"
的字符串,并将列表转换为格式为"(@P; @Q; @R)"
的字符串。显而易见的方法是使用for循环和字符串操作遍历。
有没有办法在不运行循环的情况下执行此操作?
谢谢!
答案 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)
你可以为元组做同样的事情。