【问题标题】:Converting lists of tuples to strings Python将元组列表转换为字符串 Python
【发布时间】:2011-05-16 03:21:53
【问题描述】:

我在python中写了一个函数,例如返回一个列表

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

但我希望输出为字符串,所以我可以用另一个字符替换逗号,所以输出将是

'1@1' '2@2' '3@3' 

有什么简单的方法吗?:) 感谢您提前提供任何提示

【问题讨论】:

    标签: python string list tuples


    【解决方案1】:

    这看起来像是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 是一个巨大的帮助。

    【讨论】:

    • 我是否可以在某处添加 \n 而不是 (' '),以便输出作为一列返回,每一行都有一个字符串?
    • 当然可以!为什么不在 Python 解释器中尝试print '\n'.join('%d@%d' % t for t in l)
    【解决方案2】:

    您可以使用 % 运算符和列表推导式或生成器表达式将元组转换为字符串,例如

    ll = [(1,1), (2,2), (3,3)]
    ['%d@%d' % aa for aa in ll]
    

    这将返回一个字符串列表,例如:

    ['1@1', '2@2', '3@3']
    

    您可以将生成的字符串列表连接在一起以进行输出。 This article 描述了六种不同的方法以及基准测试和分析它们的相对优点。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        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'
        

        【讨论】:

          【解决方案5】:
          [ str(e[0]) + ',' + str(e[1]) for e in [(1,1), (2,2), (3,3)] ]
          

          这是如果你想要它们在一个字符串的集合中,如果你想要一个输出字符串或一个集合,我不明白。

          【讨论】:

            【解决方案6】:
            [str(item).replace(',','@') for item in [(1,1),(2,2),(3,3)]]
            

            【讨论】:

              【解决方案7】:

              您只需要在生成器理解中使用 joinstr

              >>> ['@'.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'
              

              【讨论】:

                【解决方案8】:

                您可以使用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
                

                但这只有在您确定没有元组具有以下需要在最终结果中保留的字符序列时才有效:), ([()],

                【讨论】:

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