我需要将列表的元素加入到字符串中(到目前为止看起来很简单)。
但是这个列表有一些字符串,其他元素是数字。
我想要实现的是一个字符串,其中仍然引用原始字符串,但数字不是:
示例:
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]
然后它有效,但我真的想保留原始列表并达到预期效果。
有什么建议吗?
答案 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"