【问题标题】:Joining different list data types into string将不同的列表数据类型加入字符串
【发布时间】:2017-01-12 10:38:18
【问题描述】:

我需要将列表的元素连接成一个字符串(目前看起来很简单)。

然而,这个列表有一些元素是字符串,而另一些元素是数字。

我想要实现的是一个字符串,其中原始字符串仍然被引用但数字不是:

例子:

mystring = ['text field', 24, 'text2', 55.45]

预期输出(这实际上是一个字符串,为了清楚起见,我删除了开始和结束引号,简单的引号必须是字符串的一部分!):

'text field', 24, 'text2', 55.45

到目前为止我尝试了什么:

>>> ', '.join(mystring)

然后解释器抱怨 int:

TypeError: sequence item 1: expected string, int found

如果我尝试将所有内容映射到字符串,那么我会错过字符串的引号。

>>> ', '.join(map(str,a))

'text field, 24, text2, 55.45'

当然我可以修改我原来的列表看起来像:

mylist2 = ["'text field'", 24, "'text2'", 55.45]

然后它起作用了,但我真的想保留我的原始列表并达到预期的结果。

有什么建议吗?

【问题讨论】:

    标签: python string list join


    【解决方案1】:

    使用repr:

    >>> mystring = ['text field', 24, 'text2', 55.45]
    >>> ', '.join(map(repr, mystring))
    "'text field', 24, 'text2', 55.45"
    

    【讨论】:

    • 我喜欢使用map,但是我想知道使用map 或使用列表理解(@Willem 解决方案)之间是否有任何区别?我将发布另一个问题,询问是否真的存在差异,或者只是语义偏好。
    • @SembeiNorimaki 不要发布其他问题,请参阅stackoverflow.com/questions/1247486/…
    【解决方案2】:

    使用 str(..) 内置函数将 .join 中的元素简单地转换为字符串:

    ', '.join(str(x) for x in mystring)
    

    如果你想在你的字符串周围添加引号,你应该使用repr(..):

    ', '.join(repr(x) for x in mystring)
    

    交互式外壳中的示例:

    $ python3
    Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> str('aa')
    'aa'
    >>> mystring = ['text field', 24, 'text2', 55.45]
    >>> ', '.join(str(x) for x in mystring)
    'text field, 24, text2, 55.45'
    >>> ', '.join(repr(x) for x in mystring)
    "'text field', 24, 'text2', 55.45"
    

    请注意,双引号 (") 不是实际字符串的一部分,它们在那里表明我们正在谈论一个字符串。

    【讨论】:

    • 第二个选项(带repr)有效!谢谢。是的,双引号不是字符串的一部分(这就是我在问题中删除它们的原因,只是为了避免混淆)
    【解决方案3】:

    你不能只取列表的字符串表示并去掉括号吗?听起来这就是您实际上想要实现的目标。

    >>> str(mystring)[1:-1]
    "'text field', 24, 'text2', 55.45"
    

    【讨论】:

      【解决方案4】:

      一种方法是:

      ', '.join("'{}'".format(s) if isinstance(s, str) else str(s) for s in mystring)
      

      输出:

      >>> mystring = ['text field', 24, 'text2', 55.45]
      >>> 
      >>> ', '.join("'{}'".format(s) if isinstance(s, str) else str(s) for s in mystring)
      "'text field', 24, 'text2', 55.45"
      

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 1970-01-01
        • 2011-04-05
        • 2016-06-03
        • 2021-04-25
        • 1970-01-01
        • 2021-10-15
        • 2015-06-05
        • 2016-11-14
        相关资源
        最近更新 更多