【发布时间】:2011-05-16 03:21:53
【问题描述】:
我在python中写了一个函数,例如返回一个列表
[(1,1),(2,2),(3,3)]
但我希望输出为字符串,所以我可以用另一个字符替换逗号,所以输出将是
'1@1' '2@2' '3@3'
有什么简单的方法吗?:) 感谢您提前提供任何提示
【问题讨论】:
我在python中写了一个函数,例如返回一个列表
[(1,1),(2,2),(3,3)]
但我希望输出为字符串,所以我可以用另一个字符替换逗号,所以输出将是
'1@1' '2@2' '3@3'
有什么简单的方法吗?:) 感谢您提前提供任何提示
【问题讨论】:
这看起来像是tuples 中的list,其中每个tuple 有两个元素。
' '.join(['%d@%d' % (t[0],t[1]) for t in l])
当然可以简化为:
' '.join(['%d@%d' % t for t in l])
甚至:
' '.join(map(lambda t: '%d@%d' % t, l))
其中l 是您原来的list。这会为列表中的每个元组生成“number@number”对。然后将这些对用空格 (' ') 连接起来。
当我第一次开始使用 Python 时,join 语法对我来说有点奇怪,但 the documentation 是一个巨大的帮助。
【讨论】:
print '\n'.join('%d@%d' % t for t in l)?
您可以使用 % 运算符和列表推导式或生成器表达式将元组转换为字符串,例如
ll = [(1,1), (2,2), (3,3)]
['%d@%d' % aa for aa in ll]
这将返回一个字符串列表,例如:
['1@1', '2@2', '3@3']
您可以将生成的字符串列表连接在一起以进行输出。 This article 描述了六种不同的方法以及基准测试和分析它们的相对优点。
【讨论】:
' '.join([str(a)+"@"+str(b) for (a,b) in [(1,1),(2,2),(3,3)]])
或者对于列表中的任意元组,
' '.join(['@'.join([str(v) for v in k]) for k in [(1,1),(2,2),(3,3)]])
【讨论】:
In [1]: ' '.join('%d@%d' % (el[0], el[1]) for el in [(1,1),(2,2),(3,3)])
Out[1]: '1@1 2@2 3@3'
【讨论】:
[ str(e[0]) + ',' + str(e[1]) for e in [(1,1), (2,2), (3,3)] ]
这是如果你想要它们在一个字符串的集合中,如果你想要一个输出字符串或一个集合,我不明白。
【讨论】:
[str(item).replace(',','@') for item in [(1,1),(2,2),(3,3)]]
【讨论】:
您只需要在生成器理解中使用 join 和 str。
>>> ['@'.join(str(i) for i in t) for t in l]
['1@1', '2@2', '3@3']
>>> ' '.join('@'.join(str(i) for i in t) for t in l)
'1@1 2@2 3@3'
【讨论】:
您可以使用repr 函数,然后只替换字符串的位:
>>> original = [(1,1),(2,2),(3,3)]
>>> intermediate = repr(original)
>>> print intermediate
[(1, 1), (2, 2), (3, 3)]
>>> final = intermediate.replace('), (', ' ').replace('[(','').replace(')]','').replace(', ','@')
>>> print final
1@1 2@2 3@3
但这只有在您确定没有元组具有以下需要在最终结果中保留的字符序列时才有效:), (、[(、)]、,
【讨论】: