Python - 将元组列表转换为字符串

29

哪种方法是将元组列表转换为字符串的最pythonic方式?

我有:

[(1,2), (3,4)]

and I want:

"(1,2), (3,4)"

我的解决方案是:

l=[(1,2),(3,4)]
s=""
for t in l:
    s += "(%s,%s)," % t
s = s[:-1]

有没有更符合Python风格的方法来完成这个任务?

3
这些元组是用来做什么的?为什么它们需要放在字符串中?它们是否必须是元组? - Ignacio Vazquez-Abrams
1
为什么你想要这样做?你的真正问题是什么? - SilentGhost
1
@Ignacio,@SilentGhost:我很想听你们详细阐述一下你们的评论(我自己还在学习Python)。这可能不是OP字符串格式化问题的实际答案,但我相信你们有非常重要的观点需要发表。 - polygenelubricants
1
@polygenelubricants:底线是:这样做没有意义。元组,作为一个元组,是一种很好的结构。为什么要修改它以生成一个不明确格式化的字符串呢?如果他们只需要一个字符串,那么string.format方法就可以非常简单地完成工作。如果他们想要其他东西,那么问题应该说明他们想要实现什么。 - S.Lott
1
等等,什么?你想在你的代码中引入SQL注入攻击?Python为你提供了正确的工具,而你却要费尽心思去做错?我无话可说。 - Ignacio Vazquez-Abrams
显示剩余3条评论
7个回答

39

虽然@mykhal的解决方案更简单,但我认为这个更漂亮 :) - Ritwik Bose
Pythonic,健壮而简短。谢谢。 - Neowizard

39

你可能想要使用像这样简单的东西:

>>> l = [(1,2), (3,4)]
>>> str(l).strip('[]')
'(1, 2), (3, 4)'

...这很方便,但不能保证能正常工作。


3
如果这些元组是包含方括号的字符串元组,该怎么办? - Rob Lourens
6
str.strip() 只能移除字符串两端的空白字符。 - Ignacio Vazquez-Abrams
6
依赖于列表的内部字符串表示似乎是一种不好的做法。 - Stephen Niedzielski
1
@mykhal 它会导致一些 Unicode 字符的问题。 - GeoStoneMarten
如果您想使用不同的分隔符进行连接,这也不起作用。 - Yohan Obadia

21

这样怎么样:

>>> tups = [(1, 2), (3, 4)]
>>> ', '.join(map(str, tups))
'(1, 2), (3, 4)'

1
迄今为止最干净的解决方案! - Yohan Obadia
最“Pythonic”的答案。 - shahar_m

2
最符合Python风格的解决方案是:
tuples = [(1, 2), (3, 4)]

tuple_strings = ['(%s, %s)' % tuple for tuple in tuples]

result = ', '.join(tuple_strings)

1

怎么样?

l = [(1, 2), (3, 4)]
print repr(l)[1:-1]
# (1, 2), (3, 4)

这里的间距实际上不是您规定的那样;如果这很重要,这种方法将行不通,因为Python在列表/元组中的每个项目后添加了一个空格。 - Benj

1

我觉得这很棒:

>>> l = [(1,2), (3,4)]
>>> "".join(str(l)).strip('[]')
'(1,2), (3,4)'

试试吧,对我来说效果非常好。


0

再来三个 :)

l = [(1,2), (3,4)]

unicode(l)[1:-1]
# u'(1, 2), (3, 4)'

("%s, "*len(l) % tuple(l))[:-2]
# '(1, 2), (3, 4)'

", ".join(["%s"]*len(l)) % tuple(l)
# '(1, 2), (3, 4)'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接