将不同的列表数据类型连接到字符串

时间:2017-01-12 10:38:19

标签: python string list join

我需要将列表的元素加入到字符串中(到目前为止看起来很简单)。

但是这个列表有一些字符串,其他元素是数字。

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

示例:

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]

然后它有效,但我真的想保留原始列表并达到预期效果。

有什么建议吗?

4 个答案:

答案 0 :(得分:5)

使用repr

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

答案 1 :(得分:4)

只需使用内置的str(..).join中的元素转换为字符串:

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

如果您想在字符串周围添加引号,则应使用repr(..)

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

交互式shell中的示例:

$ 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"

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

方法是:

', '.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"