【问题标题】:Python - convert list of tuples to stringPython - 将元组列表转换为字符串
【发布时间】:2011-03-18 14:01:27
【问题描述】:

将元组列表转换为字符串的最 Pythonic 方式是什么?

我有:

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

我想要:

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

我的解决方案是:

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

有没有更 Pythonic 的方式来做到这一点?

【问题讨论】:

  • 这些元组有什么用,为什么它们需要在一个字符串中,它们实际上是否需要是元组?
  • 您为什么要这样做?你真正的问题是什么?
  • @Ignacio, @SilentGhost:我希望你们能详细说明你们的 cmets(我自己还在学习 Python)。这可能不是 OP 的字符串格式问题的实际答案,但我相信你们有非常重要的观点。
  • @polygenelubricants:底线:这没有意义。元组——作为一个元组——是一个精细的结构。为什么要弄乱它来制作一个格式模糊的字符串?如果他们想要的只是一个字符串,那么string.format 方法将非常简单地完成这项工作。如果他们想要别的东西,那么问题应该说明他们想要完成什么。
  • 等等,什么?您想要在您的代码中引入 SQL 注入攻击? Python 为您提供了正确执行此操作的工具,而您想不遗余力地做错?我无话可说。

标签: python list string-formatting tuples


【解决方案1】:

你可以试试这样的(see also on ideone.com):

myList = [(1,2),(3,4)]
print ",".join("(%s,%s)" % tup for tup in myList)
# (1,2),(3,4)

【讨论】:

  • 虽然@mykhal 的解决方案更简单,但我认为这更漂亮:)
  • Python 风格,健壮且简短。谢谢。
【解决方案2】:

你可能想使用一些简单的东西,例如:

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

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

【讨论】:

  • 如果元组是包含 [] 的字符串元组怎么办?
  • @Rob: str.strip() 只从末端移除。
  • 依赖列表的内部字符串表示似乎是一种不好的做法。
  • @mykhal 它会导致 unicode 字符出现一些问题
  • 如果你想用不同的分隔符加入也行不通。
【解决方案3】:

怎么样:

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

【讨论】:

  • 迄今为止最干净的解决方案!
  • 最“pythonic”的答案。
【解决方案4】:

怎么样

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

【讨论】:

  • 这里的间距其实不是你规定的;如果这很重要,那么这种方法将不起作用,因为 python 在列表/元组中的每个项目之后添加一个空格。
【解决方案5】:

我认为这很整洁:

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

试试吧,它对我来说就像一个魅力。

【讨论】:

    【解决方案6】:

    最pythonic的解决方案是

    tuples = [(1, 2), (3, 4)]
    
    tuple_strings = ['(%s, %s)' % tuple for tuple in tuples]
    
    result = ', '.join(tuple_strings)
    

    【讨论】:

      【解决方案7】:

      还有三个:)

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

      【讨论】:

        猜你喜欢
        • 2011-05-16
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        相关资源
        最近更新 更多